Sprache: C#
Löscht rekursiv leere Unterverzeichnisse in einer Verzeichnisstruktur.
public static void DeleteEmptySubdirectories(string path)
{
try
{
foreach (var directory in Directory.EnumerateDirectories(path))
{
DeleteEmptySubdirectories(directory);
}
if (!Directory.EnumerateFileSystemEntries(path).Any())
{
Directory.Delete(path);
}
}
catch (Exception e)
{
throw new IOException($"Exception on deleting empty subdirectories in path '{path}'. See inner exception for details.", e);
}
}
public static void DeleteEmptySubdirectories(string path)
{
try
{
foreach (var directory in Directory.EnumerateDirectories(path))
{
DeleteEmptySubdirectories(directory);
}
if (!Directory.EnumerateFileSystemEntries(path).Any())
{
Directory.Delete(path);
}
}
catch (Exception e)
{
throw new IOException($"Exception on deleting empty subdirectories in path '{path}'. See inner exception for details.", e);
}
}
Alte URL:
/snippet/leere-unterverzeichnisse-loeschen/15189
Recursiv geht oft mal schief.In diesem Fall wird ein Schreibfehler die Ausführung verhindern. Der Aufruf removeEmptySubdirectories(directory) zeigt ins Leere.
Ups, da hat der Fehlerteufel zugeschlagen. Beim Veröffentlichen des Snippets habe ich die Methode nochmal umbenannt, und dabei den rekursiven Aufruf vergessen. Sorry. Wird sofort korrigiert.
Klar schlägt die Methode beim Aufruf fehl, falls es einen Schreibschutz gibt. Die Fehlerbehandlung hatte ich nicht mit berücksichtigt, da die Methode in einem Kontext bei mir eingesetzt wird, in dem es in der Regel zu keinem Schreibfehler kommt. Aber sicher, sauberer wäre es, die Exception zu fangen, eine neue Exception mit detaillierter Information zu werfen und die original Exception als InnerException mitzugeben. Ich habe das mal so angepasst.
Für konstruktive Kritik bin ich selbstverständlich offen 🙂