| 

.NET C# Java Javascript Exception

2
Ich muss einen Ordner im Isolated Storage mitsamt allen Inhalten, Unterordnern etc. zuverlässig rekursiv löschen.

Hat jemand einen fertigen C#-Codeschnipsel zur Hand, der das zuverlässig erledigt? Möchte das Rad nicht doppelt erfinden. Soweit wie ich das bisher erkenne, muss man jede Datei und jeden Ordner einzeln löschen, oder?
News:
23.05.2011
Achso 340 1 6
2 Antworten
1
Wenn du alles im IsolatedStorage löschen willst, kannst du auch die Methode Remove nutzen. Du musst nur dafür sorgen, dass alle Dateien freigegeben werden, die du evtl. noch benutzt, da es sonst zu einem Fehler kommt.
24.05.2011
Konstantin 3,7k 1 8
Danke, aber Remove macht ja wirklich alles weg, ich muss nur gezielt (temporäre) bestimmte Orderstrukturen rausschmeißen. Das scheint leichter anscheinend nicht zu gehen.
Achso 24.05.2011
Da der IsolatedStorage nicht nur geleert, sondern komplett gelöscht wurde, muss man bei einer erneuten Verwendung des Speichers auf IsolatedStorageFile.GetUserStoreForApplication() erneut referenzieren, wodurch dieser neu angelegt wird. Wer jedoch using verwendet und das Anlegen in einem anderen Kontext durchführt, der sollte keine Problem haben.
Mario Priebe 24.05.2011
0
So, nicht lange fragen, einfach selbst coden. :-) Da ich die Frage hier ja selbst reingestellt habe und den Code nunmal brauche, anbei 'ne Rohfassung einer Klasse, die den Job erstmal straight-forward erledigt. Sicher auf die Schnelle nicht perfekt (Fehlerhandling!), aber vielleicht für den ein oder anderen doch nützlich:

public class FolderTreeDeleter
{
public FolderTreeDeleter()
{
userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication();
}

public FolderTreeDeleter(IsolatedStorageFile isolatedStorageFile)
{
userStoreForApplication = isolatedStorageFile;
}

private IsolatedStorageFile userStoreForApplication;

/// <summary>
/// Deletes complete folder tree including all sub folders and its content
/// </summary>
/// <param name="folderName">Name of the folder to delete</param>
/// <returns>In case of success true otherwise false</returns>
public bool DeleteFolderTree(string folderName)
{
//Delete folder if it exists
if (userStoreForApplication.DirectoryExists(folderName))
{
recursiveFolderDeletion(folderName);
}
else
{
throw new ArgumentException("Folder doesn't exist.");
}

//Checking success
if (userStoreForApplication.DirectoryExists(folderName))
{
//Folder still there? => result = false
return false;
}
else
{
//Folder gone? => result = true
return true;
}
}

private void recursiveFolderDeletion(string folderName)
{
//Deletion of all files in folder
deleteAllFilesInFolder(folderName);

string searchPath = Path.Combine(folderName, "*.*");

//Deletion of all subfolders in folder (recursive call of this method)
foreach (string innerFolderName in userStoreForApplication.GetDirectoryNames(searchPath))
{
string folderPath = Path.Combine(folderName, innerFolderName);
recursiveFolderDeletion(folderPath);
}

//Deletion of the folder itsself
userStoreForApplication.DeleteDirectory(folderName);
}

private void deleteAllFilesInFolder(string folderName)
{
string searchPath = Path.Combine(folderName, "*.*");

foreach (string innerFileName in userStoreForApplication.GetFileNames(searchPath))
{
string filePath = Path.Combine(folderName, innerFileName);
userStoreForApplication.DeleteFile(filePath);
}
}

}


Verwendung im kürzesten Fall wie folgt:

new FolderTreeDeleter().DeleteFolderTree("FolderToDelete");
23.05.2011
Achso 340 1 6
Achso, folgende using-Statements werden oben vorausgesetzt:
using System;
using System.IO;
using System.IO.IsolatedStorage;
Achso 23.05.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH