2010-09-20 113 views
4

我正在研究Windows Phone 7應用程序,我想知道是否有人對創建一個目錄時是否需要檢查目錄是否存在確定性的答案以及做/不做的優缺點也是。據我所知,從通過我的單步執行代碼,代碼工作的以下兩個塊相同的方式:使用IsolatedStorage,創建它之前是否需要檢查目錄是否存在?

 using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     {     
      //ensure directory exists 
      String sDirectory = System.IO.Path.GetDirectoryName(sPath); 
      if (!appStorage.DirectoryExists(sDirectory)) 
      { 
       appStorage.CreateDirectory(sDirectory); 
      } 
     } 

 using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     {     
      //ensure directory exists 
      String sDirectory = System.IO.Path.GetDirectoryName(sPath); 
      appStorage.CreateDirectory(sDirectory); 

     } 

是可以安全使用的代碼的第二塊?它似乎沒有拋出異常,如果目錄已經存在,並且似乎只留下目錄的內容。

回答

4

IsolatedStorageFile.CreateDirectory將在內部調用Directory.CreateDirectory。的Directory.CreateDirectorydocumentation指出:

如果該目錄已經存在,這 方法不起作用。

換句話說,你不需要檢查該目錄是否存在。該方法已經爲你做了。

+0

我發誓之前,我問過這個問題,我一定要錯過它 - 深夜編程的樂趣:) – 2010-09-20 13:19:55

+1

不,你沒有錯。它不在'IsolatedStorageFile.CreateDirectory'文檔中。它在'Directory.CreateDirectory'文檔中。然而'IsolatedStorageFile'調用'Directory'可以被稱爲實現細節並且可以改變。但即使內部發生變化,微軟也必須確保當目錄已經存在時,'IsolatedStorageFile'不會引發異常,因爲這將是一種行爲上的(因此是破壞性的)改變。因此它只是簡單介紹一下,它沒有描述這一點。也許你可以把它報告給微軟。 – Steven 2010-09-20 13:52:53

1

我懷疑在內部CreateDirectrory正在檢查目錄是否已經存在或正吞嚥異常。無論哪種方式,從手頭明確調用DirectoryExists可能會帶來很小的性能優勢。

確定測試的方法是通過創建大量目錄來對2種方法的性能進行基準測試。 (如果您嘗試這樣做,請注意您的父目錄中不能有超過16k個目錄,並且不能超過18個(我認爲)目錄深度。)

最好的做法是明確你在做什麼。我希望任何其他查看代碼的開發人員都會問你,在創建目錄之前,你沒有測試存在。特別是如果這個代碼被多次調用。如果您測試並發現性能沒有任何差異,我會建議在代碼中註釋以說明這一點。

相關問題