HOWTO · Csharp
Supprimer tous les fichiers d'un répertoire en C#
Pour supprimer les fichiers directement présents dans un répertoire en C#, récupérez-les avec DirectoryInfo.GetFiles() ou DirectoryInfo.EnumerateFiles(), puis appelez FileInfo.Delete() sur chacun. Pour supprimer récursivement un répertoire et son contenu, appelez DirectoryInfo.Delete(true) sur ce répertoire : cette opération supprime également le répertoire lui-même.
Sur cette page
Pour supprimer chaque fichier situé directement dans un répertoire, énumérez ses fichiers et appelez FileInfo.Delete() pour chacun. Le répertoire cible et ses sous-répertoires restent en place. Si vous supprimez aussi les sous-répertoires, leur contenu est supprimé récursivement : choisissez ce comportement uniquement si c’est bien ce que vous souhaitez. (C# ; DirectoryInfo.Delete(true)) (DirectoryInfo.Delete())
Supprimer uniquement les fichiers avec DirectoryInfo.GetFiles()
DirectoryInfo.GetFiles() renvoie un tableau d’objets FileInfo correspondant aux fichiers directement présents dans le répertoire cible. Appelez FileInfo.Delete() sur chacun pour le supprimer ; cette opération ne parcourt pas les sous-répertoires. L’exemple crée un répertoire cible temporaire et des fichiers de test, supprime les fichiers, puis indique que le répertoire cible existe toujours. Il supprime ensuite ce répertoire temporaire lors du nettoyage.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
using System;
using System.IO;
class Program
{
static void Main()
{
string path = Path.Combine(Path.GetTempPath(), "csharp-file-cleanup-" + Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(path);
File.WriteAllText(Path.Combine(path, "first.txt"), "one");
File.WriteAllText(Path.Combine(path, "second.txt"), "two");
var directory = new DirectoryInfo(path);
int removed = 0;
foreach (FileInfo file in directory.GetFiles())
{
file.Delete();
removed++;
}
Console.WriteLine($"Files removed: {removed}");
Console.WriteLine($"Target directory remains: {directory.Exists}");
Directory.Delete(path);
}
}
Files removed: 2
Target directory remains: True
Le chemin se trouve dans le répertoire temporaire du système d’exploitation. Dans une application, indiquez l’emplacement voulu et vérifiez que le processus a le droit de le modifier. Si un fichier est verrouillé ou si l’accès est refusé, la suppression peut échouer ; gérez l’erreur d’E/S ou d’autorisation appropriée à votre application au lieu de supposer que chaque appel réussit.
Supprimer les fichiers et les sous-répertoires avec DirectoryInfo.GetDirectories()
Pour supprimer les fichiers et les sous-répertoires, supprimez d’abord les fichiers directement présents dans le répertoire cible, puis utilisez DirectoryInfo.GetDirectories() pour récupérer ses sous-répertoires et appelez DirectoryInfo.Delete(true) sur chacun. L’argument true supprime récursivement chaque sous-répertoire et son contenu. Le répertoire cible lui-même reste en place. Cette opération est destructive : vérifiez le chemin cible et assurez-vous que la suppression récursive est appropriée avant de l’exécuter.
Les opérations sont foreach (FileInfo file in directory.GetFiles()) file.Delete();, puis foreach (DirectoryInfo child in directory.GetDirectories()) child.Delete(true);. Gardez ces deux boucles dans cet ordre et utilisez dans votre programme l’instance réelle de DirectoryInfo correspondant au répertoire cible.
Supprimer les fichiers avec DirectoryInfo.EnumerateFiles()
DirectoryInfo.EnumerateFiles() fournit une séquence énumérable d’objets FileInfo, que vous pouvez parcourir directement avec une boucle foreach. En comparaison, GetFiles() renvoie un tableau. Les deux approches permettent de supprimer les fichiers directement présents dans le répertoire cible ; aucune ne supprime ses sous-répertoires. Choisissez selon que vous avez besoin d’un tableau de résultats ou souhaitez parcourir la séquence. L’énumération ne garantit pas de meilleures performances pour toutes les charges de travail.
Pour supprimer uniquement les fichiers, le corps de la boucle reste file.Delete() :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
using System;
using System.IO;
class Program
{
static void Main()
{
string path = Path.Combine(Path.GetTempPath(), "csharp-enumerate-files-" + Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(path);
File.WriteAllText(Path.Combine(path, "sample.txt"), "content");
var directory = new DirectoryInfo(path);
foreach (FileInfo file in directory.EnumerateFiles())
{
file.Delete();
}
Console.WriteLine($"Files remaining: {directory.GetFiles().Length}");
Directory.Delete(path);
}
}
Files remaining: 0
Supprimer les sous-répertoires avec DirectoryInfo.EnumerateDirectories()
DirectoryInfo.EnumerateDirectories() fournit les sous-répertoires du répertoire cible. Appelez Delete(true) pour chacun lorsque vous souhaitez supprimer son arborescence complète. Cette opération ne supprime pas les fichiers directement présents dans le répertoire cible ; si vous devez supprimer les deux types de contenu, combinez-la avec une boucle limitée aux fichiers. Le répertoire cible reste en place après la suppression de ses sous-répertoires.
L’opération sur les sous-répertoires s’écrit foreach (DirectoryInfo child in directory.EnumerateDirectories()) child.Delete(true);. N’intégrez pas cette boucle à un nettoyage limité aux fichiers, sauf si la suppression récursive est voulue.
Choisir une approche et vérifier le résultat
Utilisez GetFiles() si un tableau vous est utile, ou EnumerateFiles() si vous souhaitez traiter les résultats sous forme de séquence énumérable. Ces deux opérations ne concernent que les fichiers. Ajoutez une boucle sur les sous-répertoires avec Delete(true) uniquement si la tâche prévoit une suppression récursive. Vérifiez le chemin choisi avant la suppression, puis contrôlez le contenu du répertoire avec GetFiles() et GetDirectories() ; un chemin inexistant ou inaccessible, ou un fichier impossible à supprimer, peut empêcher l’opération d’aboutir.