2009-12-01 74 views
1

我有一個winforms應用程序,它將文件的內容存儲在數據庫中。存儲的文件可以是幾乎任何類型(word,excel,PDF,文本,圖像...),用戶可以選擇幾乎任何類型的文件加載。從字節[]或流顯示文件

用戶然後可以查詢數據庫,找到一個文件,然後打開它。

我沒有問題從數據庫中提取字節數組,作爲流或字節數組。

理想情況下,我可以直接從字節數組或流中顯示文件;此刻,我已把它作爲一個臨時文件,然後打開與:

Process.Start(fileName); 

我如何可以顯示無論是從任何字節數組或流文件的相關應用程序的文件?

回答

3

在windows中,你唯一的選擇就是做你正在做的事情。 Outlook,Internet Explorer,Firefox,全部都是這樣的

+1

我同意,這是唯一的選項。 – Jochen 2009-12-01 08:55:19

+0

好吧,這似乎是共識,也是我最簡單的選擇,它已經編碼並運行。 唯一的缺點是剩餘的臨時文件。我無法從我的應用程序中刪除它們,因爲用戶可能會將已啓動的應用程序的打開時間比我的時間更長。 – baralong 2009-12-02 05:29:43

+0

當你說你將它保存爲臨時文件時,你的意思是你將文件保存到標準的Windows臨時目錄中嗎?我使用GetTempPath(http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx)。這樣,Windows將負責清理文件(雖然最終) – 2009-12-02 09:16:49

0

也許你想研究一下存儲器映射文件。

0

你可以嘗試打開包含它的目錄,但它現在就是你現在正在做的事情。如果相關的應用程序被OS知道,那麼不會有任何問題。

0

如果您在DB中存儲文件名以及字節流,您可以從擴展名中確定文件類型。在這種情況下有兩種選擇:

  1. 使用註冊表來確定要使用的應用程序。欲瞭解更多信息,請看bytes.com
  2. P/Invoke SHGetFileInfo來確定要使用的應用程序。

注:有了你仍然需要將文件寫入數據到磁盤上的臨時文件,以加載這兩個選項。

個人而言,我覺得你在做什麼可能是最簡單的選擇,反正(除非你想對某些文件類型提供定製的觀衆等)