преобразование массива MemoryStream в fileStream C # - PullRequest
1 голос
/ 06 февраля 2012

У меня есть функция, которая возвращает массив MemoryStream, я хочу преобразовать этот массив потока памяти в объект FileStream.

Возможно ли, если да, не могли бы вы предоставить способ сделать это ...

Спасибо A.ş

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Вы не можете "преобразовать" поток, потому что MemoryStream и FileStream - это очень разные вещи. Однако вы можете записать все содержимое MemoryStream в файл. Для этого можно использовать метод CopyTo:

// memStream is the MemoryStream
using (var output = File.Create(filename)) {
    memStream.CopyTo(output);
}
0 голосов
/ 06 февраля 2012

Объект файлового потока представляет открытый файл (с диска) в виде потока. Поток памяти представляет область памяти (байтовый массив) в виде потока. Таким образом, вы не можете преобразовать поток памяти в поток файлов напрямую - по крайней мере, не тривиально .

Существует два подхода:

  1. OFFLINE : полностью использовать содержимое потока памяти и записать все это в файл на диске; затем откройте этот файл как поток файлов

  2. ONLINE : расширение класса FileStream для создания адаптера, который обернет объект MemoryStream и представит его как FileStream (по сути, действующий как преобразователь)

Причина, по которой один из них помечен как [OFFLINE], заключается в том, что вам необходимо заполнить содержимое потока памяти перед его выводом в файл (и как только вы это сделаете, изменения в потоке файла не повлияют на поток памяти; ни изменения в потоке памяти, такие как новые данные, будут доступны для потока файлов)

Второй помечен как [ONLINE], поскольку после создания адаптера и инициализации объекта FileStream из MemoryStream вы можете обрабатывать любые новые данные в MemoryStream с помощью объекта адаптера FileStream. По сути, вы сможете читать / писать и искать в потоке памяти, используя файловый поток в качестве слоя поверх потока памяти. Предположительно, это то, что вы хотели бы сделать ..

Конечно, это зависит от того, что вам нужно сделать, но я склоняюсь ко второй [ONLINE] версии как к лучшему в общем смысле.

...