Je travaille actuellement sur une application qui écrit des données sur le IsolatedStorageStore. Dans le cadre de l'application, je voudrais mettre en œuvre un bouton "effacer toutes les données/réinitialiser", mais en énumérant tous les fichiers qui existent et tous les dossiers qui existent prennent un peu de temps. Y a-t-il une méthode magique de "réinitialisation" ou quelque chose que je peux utiliser, ou devrais-je plutôt me concentrer sur l'optimisation du processus de suppression manuelle?Quel est le moyen le plus rapide d'effacer le magasin isolé d'une application Windows Phone 7?
Ou puis-je m'en sortir en ne fournissant pas cette fonctionnalité, et laisser l'utilisateur désinstaller/réinstaller l'application pour une réinitialisation?
Ma méthode hideuse Supprimer toutes les fichiers est ci-dessous:
/// <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;
}
}
}
Tas merci! Je pense que j'ai essayé d'utiliser cette méthode auparavant, mais je devais avoir fait quelque chose de mal avant, car il avait l'habitude de lancer une exception ... de toute façon. Merci :) –