Использование FileStream без реального файла - PullRequest
7 голосов
/ 31 марта 2012

Я хотел использовать класс FileStream, чтобы избежать сохранения каких-либо файлов на компьютере клиента.Но каждому конструктору FileStream требуется путь к файлу.

Как мне создать FileStream из потока и не сохранять его на жестком диске?

РЕДАКТИРОВАТЬ: Я уже использую поток памяти для хранения моей информации.Но в какой-то момент мне нужно сжать файлы в другой поток.Проблема в том, что для команд zip (я смотрел в GZipStream - он упаковывает файлы в поток) требуется исходный файл filePath (FileStream).

Если я не могу превзойти, создав FileStreamиз потока, есть ли другой способ сжать потоки?

Ответы [ 3 ]

10 голосов
/ 31 марта 2012

В этом сценарии вы должны просто использовать MemoryStream и убедиться, что ваш API требует только Stream, а не FileStream специально. Например:

using(var ms = new MemoryStream()) {
     YourCode(ms);
}

В качестве альтернативы вы можете продолжать использовать FileStream, используя файл во временной области, через Path.GetTempFileName().

1 голос
/ 31 марта 2012

Вы можете использовать другие типы потоков (например, MemoryStream) или получить свой собственный класс из FileStream, который ничего не будет делать (или писать там, где вам нужно).

0 голосов
/ 31 марта 2012

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

Вы можете проверить другие * Потоковые классы, унаследованные от System.IO.Stream, например MemoryStream .

...