2010-10-08 2 views
3

В настоящее время я работаю над приложением, которое записывает данные в IsolStorageStore. Как часть приложения, я хотел бы реализовать кнопку «очистить все данные/сброс», но перечисление всех файлов, которые существуют, и все существующие папки занимают довольно много времени. Есть ли волшебный метод «перезагрузки» или что-то, что я могу использовать, или я должен сосредоточиться на оптимизации процесса удаления вручную?Каков самый быстрый способ очистки изолированного хранилища для приложения Windows Phone 7?

Или я могу уйти, не предоставляя такую ​​функциональность, и оставить его пользователю для удаления или переустановки приложения для сброса?

Мой отвратительный метод Delete-все-файлы ниже:

/// <summary> 
    /// deletes all files in specified folder 
    /// </summary> 
    /// <param name="sPath"></param> 
    public static void ClearFolder(String sPath, IsolatedStorageFile appStorage) 
    {  
     //delete all files 
     string[] filenames = GetFilenames(sPath); 
     if (filenames != null) 
     { 
      foreach (string sFile in filenames) 
      { 
       DeleteFile(System.IO.Path.Combine(sPath, sFile)); 
      } 
     } 

     //delete all subfolders if directory still exists 
     try 
     { 
      foreach (string sDirectory in appStorage.GetDirectoryNames(sPath)) 
      { 
       ClearFolder(System.IO.Path.Combine(sPath, sDirectory) + @"\", appStorage); 
      } 
     } 
     catch (DirectoryNotFoundException ex) 
     { 
      //current clearing folder was deleted/no longer exists - return 
      return; 
     } 

     //try to delete this folder 
     try 
     { 
      appStorage.DeleteDirectory(sPath); 
     } 
     catch (ArgumentException ex) { } 

    } 

    /// <summary> 
    /// Attempts to delete a file from isolated storage - if the directory will be empty, it is also removed. 
    /// </summary> 
    /// <param name="sPath"></param> 
    /// <returns></returns> 
    public static void DeleteFile(string sPath) 
    { 
     using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      appStorage.DeleteFile(sPath); 

      String sDirectory = System.IO.Path.GetDirectoryName(sPath); 
      //if this was the last file inside this folder, remove the containing folder 
      if (appStorage.GetFileNames(sPath).Length == 0) 
      { 
       appStorage.DeleteDirectory(sDirectory); 
      } 
     } 
    } 

    /// <summary> 
    /// Returns an array of filenames in a given directory 
    /// </summary> 
    /// <param name="sHistoryFolder"></param> 
    /// <returns></returns> 
    public static string[] GetFilenames(string sDirectory) 
    { 
     using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      try 
      { 
       return appStorage.GetFileNames(sDirectory); 
      } 
      catch (DirectoryNotFoundException) 
      { 
       return null; 
      } 
     } 
    } 

ответ

6

Вы ищете метод Remove().

Используйте это так:

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    store.Remove(); 
} 
+0

благодарит кучки! Я думаю, что я пытался использовать этот метод раньше, но я, должно быть, делал что-то не так, как раньше, когда он использовал исключение ... в любом случае. благодаря :) –