2010-10-20 138 views
2

我有以下問題:我有一些(二進制)文件,它們嵌入資源中。由於某些原因,我必須將這些文件暫時寫在磁盤上。我應該如何繼續?也許這可以使用GetRandomFilename()或GetTempFileName()?在C#中的磁盤上臨時寫入文件

+3

這兩個應該工作。只記得事後清理,沒有人喜歡髒的TEMP目錄。 – leppie 2010-10-20 11:42:25

+0

是的,一個同事犯了一個錯誤,認爲Windows知道臨時文件可以被刪除,並且會定期清理它們。最終我們達到了最高限度,並且軟件崩潰了。 – StriplingWarrior 2010-10-20 16:07:55

回答

9

GetTempFileName()是在這種情況下使用的邏輯。

正如leppie所說,確保在完成後刪除文件以避免任何問題。 GetTempFileName()如果用於創建超過65535個文件而不刪除以前的臨時文件,則會引發IOException。

0

您也可以創建一個Guid並從中創建一個文件名。保證獨特和快速。

GetTempFile完全慢,因爲它必須掃描免費的文件名。它只是創建一個前綴並添加一個數字。如果該名稱的文件已存在,則跳過該名稱。如果您的臨時文件夾已滿,此檢查需要時間。

也不可能指定應在哪個文件夾創建臨時文件。 GetTempFile總是在Windows分區上創建臨時文件。如果您創建大型臨時文件,則需要指定它們應存儲的位置。

+0

這看起來像是一些不必要的額外步驟,但是如果您發現自己在GetTempFileName()的限制之外工作,即如果您需要超過65,535個文件,則會很有用。 – 2010-10-20 11:48:24

+0

也完全無視窗口說你應該這樣做的方式。 -1。 – TomTom 2010-10-20 12:04:04