異常

2011-07-23 72 views
1

我出現以下情況例外,當我試圖刪除獨立存儲目錄中的Windows Phone 7:在訪問IsolatedStorage發生異常

錯誤。
沒有內部異常。

using (var isf = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    isf.DeleteDirectory(dir.TrimEnd('/')); 
} 

注:

  1. 把它放在一個try-catch將隱藏例外,但仍目錄不會被刪除!
  2. 在調用此函數之前,我使用DeleteFile()刪除了內部的所有文件,因此問題無法與目錄中的現有文件相關聯。
  3. 修剪目錄名稱是爲了確保它是一個有效的目錄名稱。

任何想法?

謝謝。

+0

任何細節(內)異常?你是100%確定'dir。TrimEnd('/')'產生一個有效的目錄名? –

+0

沒有內部異常和修剪是爲了確保dir是一個有效的目錄名稱 –

+0

100%肯定需要使用IsolatedStorageFile.DirectoryExists() –

回答

6

好的,問題解決了,問題是文件沒有被正確刪除。我感到困惑的原因是,當您刪除無效文件時,IsolatedStorageFile類不會警告您。這裏是正確的代碼和一些說明:

public static void DeleteDirectoryRecursive(this IsolatedStorageFile isf, string dir) 
{ 
    foreach (var file in isf.GetFileNames(dir)) 
    { 
     isf.DeleteFile(dir + file); 
    } 

    foreach (var subdir in isf.GetDirectoryNames(dir)) 
    { 
     isf.DeleteDirectoryRecursive(dir + subdir + "\\"); 
    } 

    isf.DeleteDirectory(dir.TrimEnd('\\')); 
} 

注:

  1. 有在文件路徑 '\' 和 '/' 之間沒有差別
  2. trimEnd()是必需的時DeleteDirectory否則必須拋出異常「路徑必須是有效的文件名」。
  3. GetFileNames()和GetDirectoryNames()僅返回名稱部分而不是完整路徑。所以爲了使用每一個結果,你需要將它與(在這個例子中的DeleteFile())目錄
1

根據您的代碼和描述,您將在每次迭代時重新創建IsolatedStorageFile訪問權限?

您應該發佈所有代碼,因爲錯誤與您目前所告訴的內容無關。至於一個工作示例,請參閱this blog post。如果你的目錄名稱失敗,你顯然做錯了。

此外,我相信它使用反斜槓,而不是正斜槓的路徑,所以你的修剪()將是無用的任何方式。

+1

(1)在任何Windows操作系統中,反斜槓和正斜槓在文件路徑中都是相同的。 (2)不修剪我得到「路徑必須是有效的文件名」 –

0

感謝valipour結合起來,我解決了這個問題

foreach (var file in isf.GetFileNames(dir)) 
{ 
    isf.DeleteFile(dir + file); 
} 

在我的情況的變量DIR是「圖像」。爲了獲取「圖片」目錄中的所有文件名,您應該使用isf.GetFileNames("images/*")

0

抓住Valipour的版本並使其工作。增加了一些檢查來提高穩定性+修正了一些名字。這對我的作品上的Lumia 920

private void DeleteDirectoryRecursive(string dir) 
    { 
     if (String.IsNullOrEmpty(dir)) return; 

     try 
     { 
      using (var isoFiles = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       foreach (var file in isoFiles.GetFileNames(dir + "\\*")) 
       { 
        var filename = dir + "/" + file; 
        if (isoFiles.FileExists(filename)) 
         isoFiles.DeleteFile(filename); 
       } 

       foreach (var subdir in isoFiles.GetDirectoryNames(dir)) 
       { 
        var dirname = dir + subdir + "\\"; 
        if (isoFiles.DirectoryExists(dirname)) 
         DeleteDirectoryRecursive(dirname); 
       } 

       var currentDirname = dir.TrimEnd('\\'); 
       if (isoFiles.DirectoryExists(currentDirname)) 
        isoFiles.DeleteDirectory(currentDirname); 
      } 
     } 
     catch (Exception e) 
     { 
      throw; 
     } 
    } 
1
`public static void DeleteDirectoryRecursive(string directory, IsolatedStorageFile store) 
    { 
     if (!store.DirectoryExists(directory)) 
      return; 
     var pattern = Path.Combine(directory, "*"); 
     foreach (var file in store.GetFileNames(pattern)) 
     { 
      store.DeleteFile(Path.Combine(directory, file)); 
     } 
     foreach (var folder in store.GetDirectoryNames(pattern)) 
     { 
      DeleteDirectoryRecursive(Path.Combine(directory, folder), store); 
     } 

     store.DeleteDirectory(directory); 
    }`