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: truearuncăIOExceptiondacă dosarul nu este gol.- Presupunerea că
GetFilesîntoarce fișierele în ordine alfabetică. Ordinea depinde de sistemul de fișiere. - Verificarea
Existsurmată de operație poate eșua dacă alt proces schimbă dosarul între timp. Tratează oricum excepțiile de I/O.
Comenzi înrudite
Path (Combine, GetFileName, GetExtension): Construiește și desface căi de fișiere fără să lucrezi cu text manual: Combine, GetFileName, GetExtension, GetDirectoryName, ChangeExtension.StreamReader și StreamWriter: Citesc și scriu text dintr-un fișier sau stream, linie cu linie, fără să încarce tot fișierul în memorie.