2011-06-04 2 views
5

Можно ли открыть файл непосредственно с MemoryStream, противоположный записи на диск, и сделать Process.Start()? В частности, файл pdf? Если нет, я думаю, мне нужно написать MemoryStream на диск (что раздражает). Может ли кто-то тогда указать мне на ресурс о том, как написать MemoryStream на диск?Как открыть файл из потока памяти

+0

(James - я удалил зависимость 4.0 от моего ответа) –

ответ

7

Это зависит от клиента :), если клиент примет вход от stdin, вы можете нажать dta клиенту. Другая возможность может заключаться в том, чтобы написать сервер именованных каналов или сокет-сервер - не тривиально, но он может работать.

Однако самым простым вариантом является просто захватить временный файл и записать его (и удалить впоследствии).

var file = Path.GetTempFileName(); 
using(var fileStream = File.OpenWrite(file)) 
{ 
    var buffer = memStream.GetBuffer(); 
    fileStream.Write(buffer, 0, (int)memStream.Length); 
} 

Не забудьте очистить файл, когда закончите.

+0

Или используйте 'WriteTo' (для не 4.0) – Magnus

+0

@Magnus - я удалил это; понял, что я могу использовать back-buffer из MemoryStream –

0

Если при открытии файла вы имеете в виду что-то вроде запуска Adobe Reader для файлов PDF, то да, вы должны записать его в файл. То есть, если приложение не предоставляет вам какой-либо API, сделайте это.

Один из способов, чтобы написать поток в файл будет:

using (var memoryStream = /* create the memory stream */) 
using (var fileStream = File.OpenWrite(fileName)) 
{ 
    memoryStream.WriteTo(fileStream); 
} 
1

Path.GetTempFileName() возвращает имя файла с расширением '.tmp', поэтому вы cant't использовать Process.Start(), который необходимо ассоциация файлов Windows через расширение.