2011-10-26 52 views
2

我需要將文件複製到tmp位置才能操作它。我需要確保我總是可以複製文件。將文件複製到tmp文件夾的建議方法是什麼?

  • 以下代碼是否正確?
  • 確保不會嘗試複製到已存在的位置嗎?
  • 有沒有失敗的機會? (我應該捕獲任何異常)

,我現在用的就是下面的代碼:

string tmpFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); 

在此先感謝。

+4

路徑。GetTempFileName()我認爲這就是你需要的全部 – jjchiw

+0

你可能想要改寫你的問題,因爲沒有在你的代碼中有一個複製操作,你只是想知道如何獲取一個唯一的命名臨時文件的文件名。 GetTempFileName是你需要的。 – Ernesto

+0

至於限制,有幾點:如果GetTempFileName方法用於創建超過65535個文件而不刪除以前的臨時文件,GetTempFileName方法將引發IOException。 如果沒有唯一的臨時文件名可用,則GetTempFileName方法將引發IOException。要解決此錯誤,請刪除所有不需要的臨時文件。 – Ernesto

回答

3

也許用Path.GetTempFileName代替?

string tmpFile = Path.GetTempFileName(); 

該方法可能會拋出IOException,因此您應該在某個時候捕獲該方法。究竟在哪裏取決於這個代碼存在的上下文。

請注意,此方法也會在磁盤上創建文件,因此不會有其他進程在此調用與代碼寫入文件之間創建相同名稱的文件的風險。

1

出了什麼問題:

string tmpFile = Path.GetTempFileName(); 

從MSDN上Path.GetTempFileName()

在磁盤上創建一個唯一命名的,零字節臨時文件並返回 該文件的完整路徑。該文件具有.TMP擴展名。

它並確保你沒有得到一個已經存在,並就您的瞭解故障場景的問題一個文件,如果它不能創建一個這樣的文件:

的GetTempFileName方法將引發IOException如果它用於 創建超過65535個文件而不刪除以前的臨時文件 。

如果沒有唯一的臨時文件名可用,則GetTempFileName方法將引發IOException。要解決此錯誤,請刪除 所有不需要的臨時文件。

2
  • 你的代碼工作(儘管沒有做你想做的,看下點)
  • 沒有,GetRandomFileName行得檢查名稱的唯一,我會建議使用GetTempFileName()代替。
  • 您不必在此處查看,但是當您開始使用該文件(寫入該文件)時可能會出現錯誤(例如,完整磁盤)。如果使用GetTempFileName(),則需要開始檢查錯誤,因爲它無法創建文件時會返回錯誤,或者沒有可用的唯一名稱。
相關問題