2011-07-13 96 views
0

我有一個奇怪的問題......我想我已經縮小到了使用Page.GetTempFileName()創建臨時文件的程度。可以Path.GetTempFileName()永遠緩存嗎?

我有時會得到一個錯誤信息,說明Cannot create a file when that file already exists.

是否有機會使用Path.GetTempFilename()可以產生相同的文件名,併成爲高速緩存?

我改變我的代碼使用方法:

Path.Combine(System.IO.Path.GetTempPath(), string.Concat(Guid.NewGuid().ToString(), ".xls")); 

在希望,這將產生一個唯一的文件名,但我擔心的是,同樣的問題可能出現。

回答

2

Path.GetTempFilename()在磁盤上創建一個實際的文件;取決於你在做什麼,一旦你有這個文件名,你可能會觸發一些東西。它被寫爲返回實際文件以避免與過去較舊的臨時文件名方法相關的競爭條件(例如C標準庫中的tmpnam)。

請注意,如果超過65,535個,它將引發異常使用此方法創建的文件而不刪除它們,或者它不能生成唯一的文件名。

那麼,在你從Path.GetTempFilename()中取回它後,你用那個文件名做什麼?

+0

我們使用SyncFusion庫從返回的一些數據生成Excel(xls)文件。所以我們將文件從'.tmp'移動到'.xls',然後使用'SaveAs'寫入文件。一旦我們完成,我們通常會刪除文件。有時候,這種情況不會發生...... –

+0

那麼這個調用只會驗證這個名字沒有與.tmp擴展名一起使用。當你重命名它時,你是否首先檢查你是否已經有一個帶有.xls這個名字的文件?當這種情況失敗時,臨時目錄中有多少個文件(並且在此之後會一直失敗,或者只是偶爾?) – Joe

+0

它只是偶爾。所以它可能會重用現有的文件名,因爲它不存在作爲一個tmp ...有趣的。我希望上面提到的有關使用GUID創建文件的更改。我甚至添加了一個while循環來檢查文件是否存在,如果它確實是安全的,請重新生成一個新名稱。 –