2014-09-22 223 views
2

我正在使用GetTempFileName()將字節從數據庫寫入臨時文件。這些文件通常是PDF類型,但是,它們可以並且確實有所不同。GetTempFileName()和正確的文件擴展名

我遇到了嘗試Process.Start(tempPath)引發錯誤的問題,因爲Windows無法找到與.tmp文件關聯的程序。

與編寫一個驗證MIME類型並根據需要調整文件名的自定義方法相反,有沒有在.NET中處理這種.tmp文件類型的常見/標準方法?

回答

2

我想這Reed Copsey's answer一個相關的問題可以幫助回答你:

可以擴展附加到自動生成的臨時文件:

string filename = System.IO.Path.GetTempFileName() + ".pdf"; // Makes something like "C:\Temp\blah.tmp.pdf" 

File.WriteAllBytes(filename, filedata); 

var process = Process.Start(filename); 
// Clean up our temporary file... 
process.Exited += (s,e) => System.IO.File.Delete(filename); 
+0

除了現在要生成兩個文件。一個作爲'%temp%\​​.tmp',另一個作爲'%temp%\​​.tmp.pdf'。 (就我個人而言,我會使用['FindExecutable'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb776419%28v=vs.85%29.aspx)並保持雜亂) – 2014-09-22 15:03:18

+0

@BradChristie:是的,但第二個也是在temp-directory中創建的,並且會在'process.Exited'中刪除。 'GetTempFileName'文件有0個字節,沒有額外的命名衝突。 – 2014-09-22 15:39:04

+0

但是你仍然不允許超過65535個文件,並且你只是刪除了重命名的變體而不是原始文件(儘管可以在你的lambda中輕鬆更改)。我只是覺得在使用shell方法時不需要使用兩個文件。 – 2014-09-22 17:02:51