CodeGym /Kurse /C# SELF /Erstellen und Löschen von Verzeichnissen (

Erstellen und Löschen von Verzeichnissen ( Directory)

C# SELF
Level 40, Lektion 1
Verfügbar

1. Einführung

Stell dir vor, du schreibst ein Programm, in das der Benutzer seine Fotos hochlädt. Es wäre gut, sie nicht einfach alle in einen einzigen Ordner zu werfen, sondern separate Verzeichnisse anzulegen — zum Beispiel nach Datum oder nach Benutzername. Oder deine Anwendung generiert Berichte: es ist sinnvoll, die Ergebnisse in ein eigenes Verzeichnis zu legen, das zur Laufzeit erstellt werden muss. Temporäre Ordner nach der Arbeit zu löschen ist sogar Aufgabe sauberen Codes (und erspart dem Nutzer Müll).

Die Arbeit mit Verzeichnissen ist eine Standardaufgabe in vielen Anwendungen: von Backups bis zu Spielen, die ihre Saves in Ordnern ablegen wollen. Bei Vorstellungsgesprächen kommt das Thema oft vor, weil man hier nicht nur wissen muss, wie man "erstellt" oder "löscht", sondern auch, wie sich das in Randfällen verhält.

Ein Verzeichnis (oder Ordner) ist im Grunde ein Container für andere Dateien und Verzeichnisse im Dateisystem. Verzeichnisse bilden eine baumartige Struktur (filesystem tree): jeder Ordner hat einen Parent, außer dem obersten (Root), und kann beliebig viele Child-Ordner haben.

2. Wie erstellt man einen Ordner? Die statische Klasse Directory

Der einfachste Weg, einen Ordner zu erstellen, ist die statische Methode Directory.CreateDirectory. Du musst kein Objekt anlegen, übergib einfach den Pfad:

using System.IO;

// Wir erstellen den Ordner "Reports" im aktuellen Verzeichnis
Directory.CreateDirectory("Reports");

Wenn so ein Ordner bereits existiert, macht die Methode nichts und wirft keinen Fehler — du kannst CreateDirectory also bedenkenlos aufrufen, ohne zu prüfen, ob der Ordner schon da ist.

Probieren wir einen komplexeren Pfad, z. B. eine verschachtelte Struktur zu erstellen:

Directory.CreateDirectory(@"Data\Photos\2024\June");

Dieser Aufruf erstellt die gesamte Verzeichnis-Kette, wenn einige Zwischenordner noch nicht existierten. Das nennt man rekursives Erstellen — Directory.CreateDirectory kümmert sich automatisch darum.

Wichtig! In Pfaden zu Verzeichnissen verwende entweder doppelte Backslashes (\\) für Windows oder normale Slashes (/). Noch besser ist Path.Combine, worüber wir bereits gesprochen haben.

Was gibt CreateDirectory zurück?

Die Methode gibt ein Objekt vom Typ DirectoryInfo zurück. Das ist praktisch, wenn du direkt mit diesem Verzeichnis weiterarbeiten willst:

DirectoryInfo reportsDir = Directory.CreateDirectory("Reports");
Console.WriteLine($"Erstellter Ordner: {reportsDir.FullName}");

Wie prüft man, ob ein Ordner existiert?

Immer wenn du eine Operation an einem Verzeichnis durchführen willst, ist es sinnvoll zu prüfen, ob es existiert. Dafür gibt es die statische Methode:

bool exists = Directory.Exists("Reports");
if (!exists)
{
    Console.WriteLine("Ordner nicht gefunden, wir erstellen ihn jetzt!");
    Directory.CreateDirectory("Reports");
}

Merke: Es ist nicht zwingend nötig, vorher zu prüfen, ob ein Ordner existiert: die Methode macht nichts kaputt, wenn der Ordner schon da ist. Wenn du jedoch dem Nutzer eine schöne Meldung zeigen oder die Logik unterschiedlich behandeln möchtest, ist diese Prüfung nützlich.

3. Ordner erstellen: praktische Fälle

Lass uns dieses Wissen in unserer Übungsanwendung anwenden. Angenommen, wir verwalten Benutzer-Einträge und wollen für jeden Benutzer einen eigenen Ordner anlegen:

// Füge System.IO oben in der Datei hinzu, falls nicht vorhanden
using System.IO;

Console.Write("Gib den Benutzernamen ein: ");
string userName = Console.ReadLine() ?? "Unknown";

// Pfad für den Benutzerordner zusammenbauen
string basePath = "UsersData";
string userPath = Path.Combine(basePath, userName);

// Ordner für den Benutzer erstellen (inkl. Parent, falls nötig)
Directory.CreateDirectory(userPath);

Console.WriteLine($"Ordner für Benutzer \"{userName}\" ist bereit: {Path.GetFullPath(userPath)}");

Das obige Beispiel erzeugt die Dateistruktur (falls sie nicht existierte):


UsersData/
  └── Benutzername/

Tipp: Verwende immer Path.Combine, wenn du Pfadteile zusammensetzt — so läuft dein Code sowohl auf Windows als auch auf Linux/Mac.

4. Wie löscht man einen Ordner? Methode Directory.Delete

Das Löschen eines Ordners ist fast so einfach wie das Erstellen. Es gibt aber ein paar Fallstricke.

Directory.Delete("Reports");

Wenn der Ordner existiert und leer ist, wird er problemlos gelöscht. Liegt jedoch etwas darin, wird eine Ausnahme geworfen:
System.IO.IOException: "The directory is not empty."

Und wenn man einen Ordner mit Inhalt löschen muss?

Dafür gibt es eine Überladung der Methode — mit dem Parameter recursive: true:

Directory.Delete("Reports", recursive: true);

Achtung: Rekursives Löschen zerstört unwiderruflich alles im Ordner. Wenn du den falschen Pfad angibst, kannst du wichtige Daten verlieren. Überprüfe den Pfad immer zweimal!

Beispiel

Fügen wir die Möglichkeit hinzu, den Benutzerordner zu löschen (z. B. wenn der Benutzer sein Konto entfernt hat):

// Fragen, ob gelöscht werden soll
Console.Write("Benutzerordner löschen? (y/n): ");
string input = Console.ReadLine() ?? "";

if (input.ToLower() == "y")
{
    if (Directory.Exists(userPath))
    {
        // Löschen inklusive aller Inhalte
        Directory.Delete(userPath, recursive: true);
        Console.WriteLine("Benutzerordner wurde gelöscht!");
    }
    else
    {
        Console.WriteLine("Ordner existiert bereits nicht mehr.");
    }
}

5. Tabelle: Hauptmethoden für die Arbeit mit Ordnern

Operation Methode Besonderheiten
Ordner erstellen
Directory.CreateDirectory(path)
Erstellt rekursiv alle Ordner im Pfad
Existenz prüfen
Directory.Exists(path)
Gibt true oder false zurück
Leeren Ordner löschen
Directory.Delete(path)
Wirft einen Fehler, wenn der Ordner nicht leer ist
Ordner mit Inhalt löschen
Directory.Delete(path, recursive: true)
Löscht unwiderruflich alles darin
Liste der Dateien erhalten
Directory.GetFiles(path)
Gibt Dateinamen zurück
Liste der Unterordner erhalten
Directory.GetDirectories(path)
Gibt Verzeichnisnamen zurück

6. Unklare Punkte und typische Fehler

Fehler beim Erstellen: fehlende Rechte oder ungültiger Pfad

Wenn du versuchst, einen Ordner in Systemverzeichnissen anzulegen (z. B. "C:\Windows\System32\SuperApp"), bekommst du wahrscheinlich eine UnauthorizedAccessException oder eine IOException.

Praktische Hinweise:

Behandle Fehler immer mit try-catch, wenn du mit externen Orten arbeitest (z. B. auf einem USB-Stick des Benutzers oder einem Netzlaufwerk).

Vertraue Benutzereingaben für Pfade nicht blind.

try
{
    Directory.CreateDirectory(pathFromUser);
}
catch (Exception ex)
{
    Console.WriteLine($"Konnte Ordner nicht erstellen: {ex.Message}");
}

Löschen, wenn der Ordner von einem anderen Prozess benutzt wird

Wenn jemand (oder dein eigenes Programm) eine Datei aus dem Ordner geöffnet hat und sie offen hält, bekommst du beim Versuch zu löschen eine IOException — "kann nicht löschen, Ordner wird verwendet". Schließe zuerst alle Dateien im Ordner.

Ordner ist nicht leer, und du hast recursive: true vergessen

Sehr häufiges Problem. Wenn du recursive: true nicht übergibst und der Ordner nicht leer ist, erhältst du eine Ausnahme.

Verwende absolute Pfade für kritische Operationen

Arbeit mit relativen Pfaden ("Reports") bezieht sich immer auf das aktuelle Arbeitsverzeichnis der Anwendung. Wird das Programm von einem anderen Ort gestartet, wird der Ordner nicht dort erstellt, wo du erwartest. Prüfe, von wo dein Code gestartet wird, oder verwende gleich einen absoluten Pfad:

string fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "MyAppData");
Directory.CreateDirectory(fullPath);
2
Aufgabe
C# SELF, Level 40, Lektion 1
Gesperrt
Erstellen einer benutzerdefinierten Ordnerstruktur
Erstellen einer benutzerdefinierten Ordnerstruktur
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION