2011-06-04 19 views
5

是否可以直接從MemoryStream打開文件,而不是寫入磁盤並執行Process.Start()?特別是一個PDF文件?如果不是,我想我需要將MemoryStream寫入磁盤(這有點令人討厭)。那麼有人能指點我一個關於如何將MemoryStream寫入磁盤的資源?如何從內存流中打開文件

+0

(詹姆斯 - 我刪除了4.0依賴從我的答案) – 2011-06-04 12:22:00

回答

7

這取決於客戶端:)如果客戶端將接受來自stdin的輸入,您可以將推送給客戶端。另一種可能是編寫一個命名管道服務器或一個套接字服務器 - 不是微不足道的,但它可能工作。

但是,最簡單的選擇是隻抓取臨時文件並寫入(然後刪除)。

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 2011-06-04 12:18:55

+0

@Magnus - 我刪除;意識到我可以使用MemoryStream的後臺緩衝區 – 2011-06-04 12:21:35

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文件關聯。