Directory și DirectoryInfo în C# (.NET)

.NET BCL și CLI-ul dotnet .NET Framework 1.0

Creează, listează, mută și șterge dosare; GetFiles și EnumerateFiles găsesc fișierele după model, inclusiv în subdosare.

Sintaxă C#
Directory.CreateDirectory(cale)   Directory.GetFiles(cale, "*.txt")   Directory.Delete(cale, recursive: true)

Ce face Directory și DirectoryInfo

Clasa statică Directory lucrează cu dosare: CreateDirectory creează tot drumul care lipsește și nu dă eroare dacă dosarul există, Exists verifică, GetFiles/GetDirectories listează, Move mută, Delete(cale, recursive: true) șterge cu tot conținutul.

EnumerateFiles întoarce fișierele pe rând, pe măsură ce sunt găsite, deci e mai potrivit decât GetFiles pentru dosare mari. Cu SearchOption.AllDirectories caută și în subdosare. Ordinea rezultatelor nu este garantată: sortează-le dacă ai nevoie.

DirectoryInfo este varianta orientată pe obiect: un obiect pentru un dosar, cu proprietăți (Name, FullName, Parent) și metode care întorc FileInfo, din care afli dimensiunea (Length) și data modificării.

Exemple

Exemplul 1: Creare, listare și ștergere

Directory.CreateDirectory("facturi/2026");
File.WriteAllText("facturi/2026/ianuarie.txt", "100");
File.WriteAllText("facturi/2026/februarie.txt", "200");
File.WriteAllText("facturi/2026/note.md", "de verificat");

foreach (string f in Directory.GetFiles("facturi/2026", "*.txt").Order())
    Console.WriteLine(Path.GetFileName(f));

Console.WriteLine(Directory.Exists("facturi"));
Directory.Delete("facturi", recursive: true);
Console.WriteLine(Directory.Exists("facturi"));

Rezultat

februarie.txt
ianuarie.txt
True
False

Exemplul 2: Dimensiunea totală cu DirectoryInfo

File.WriteAllText scrie UTF-8 fără BOM, deci fiecare cifră are un octet.

Directory.CreateDirectory("poze/vacanta");
File.WriteAllText("poze/a.jpg", "12345");
File.WriteAllText("poze/vacanta/b.jpg", "1234567890");

var dosar = new DirectoryInfo("poze");
long total = dosar.EnumerateFiles("*.jpg", SearchOption.AllDirectories).Sum(f => f.Length);

Console.WriteLine($"{dosar.Name}: {total} octeți");
foreach (var sub in dosar.EnumerateDirectories())
    Console.WriteLine($"subdosar: {sub.Name}");

Rezultat

poze: 15 octeți
subdosar: vacanta

Greșeli frecvente

  • Directory.Delete(cale) fără recursive: true aruncă IOException dacă dosarul nu este gol.
  • Presupunerea că GetFiles întoarce fișierele în ordine alfabetică. Ordinea depinde de sistemul de fișiere.
  • Verificarea Exists urmată de operație poate eșua dacă alt proces schimbă dosarul între timp. Tratează oricum excepțiile de I/O.

Comenzi înrudite