Можно ли открыть файл непосредственно с MemoryStream
, противоположный записи на диск, и сделать Process.Start()
? В частности, файл pdf? Если нет, я думаю, мне нужно написать MemoryStream
на диск (что раздражает). Может ли кто-то тогда указать мне на ресурс о том, как написать MemoryStream
на диск?Как открыть файл из потока памяти
ответ
Это зависит от клиента :), если клиент примет вход от stdin, вы можете нажать dta клиенту. Другая возможность может заключаться в том, чтобы написать сервер именованных каналов или сокет-сервер - не тривиально, но он может работать.
Однако самым простым вариантом является просто захватить временный файл и записать его (и удалить впоследствии).
var file = Path.GetTempFileName();
using(var fileStream = File.OpenWrite(file))
{
var buffer = memStream.GetBuffer();
fileStream.Write(buffer, 0, (int)memStream.Length);
}
Не забудьте очистить файл, когда закончите.
Или используйте 'WriteTo' (для не 4.0) – Magnus
@Magnus - я удалил это; понял, что я могу использовать back-buffer из MemoryStream –
Если при открытии файла вы имеете в виду что-то вроде запуска Adobe Reader для файлов PDF, то да, вы должны записать его в файл. То есть, если приложение не предоставляет вам какой-либо API, сделайте это.
Один из способов, чтобы написать поток в файл будет:
using (var memoryStream = /* create the memory stream */)
using (var fileStream = File.OpenWrite(fileName))
{
memoryStream.WriteTo(fileStream);
}
Path.GetTempFileName() возвращает имя файла с расширением '.tmp', поэтому вы cant't использовать Process.Start(), который необходимо ассоциация файлов Windows через расширение.
(James - я удалил зависимость 4.0 от моего ответа) –