2012-02-06 1 views
1

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

Можно ли да пожалуйста, вы можете обеспечить способ сделать это ...

Благодаря AS

+0

Вы хотите, чтобы * написать * поток памяти в файл? –

+0

Что вы подразумеваете под массивом MemoryStream? Массив ? Итак, у вас нет одного потока памяти, но несколько? В любом случае, MemoryStream означает, что данные хранятся в памяти. Чтобы «преобразовать» его, вам нужно будет создать файл и сохранить там данные. – ElDog

ответ

2

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

// memStream is the MemoryStream 
using (var output = File.Create(filename)) { 
    memStream.CopyTo(output); 
} 
+1

Звонки на Flush и Close являются избыточными; файл будет закрыт в конце используемого блока, и его закрытие также будет скрыто. –

+0

Спасибо. Я мог бы быть немного ревностным, действительно, действительно желая, чтобы все было написано. :) Отредактировано! –

0

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

Есть два подхода, которые Вы могли бы взять с собой:

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

  2. ОНЛАЙН: Степень класс FileStream создает адаптер, который будет обернуть объект MemoryStream и подвергнуть его как FileStream (по существу, действующей в качестве преобразователя)

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

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

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