Какой самый быстрый способ очистить изолированное хранилище для приложения Windows Phone 7? - PullRequest
3 голосов
/ 09 октября 2010

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

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

Мой отвратительный метод удаления всех файлов приведен ниже:

    /// <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;
            }
        }
    }

1 Ответ

6 голосов
/ 09 октября 2010

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

Используйте его следующим образом:

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