В настоящее время я работаю над приложением, которое записывает данные в 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;
}
}
}
благодарит кучки! Я думаю, что я пытался использовать этот метод раньше, но я, должно быть, делал что-то не так, как раньше, когда он использовал исключение ... в любом случае. благодаря :) –