web-dev-qa-db-fra.com

Supprimer les fichiers du répertoire si le nom de fichier contient un certain mot

Je dois vérifier un répertoire pour voir s'il y a des fichiers dont le nom de fichier contient un mot-clé spécifique et s'il y en a, pour les supprimer. Est-ce possible?

Par exemple, supprimez tous les fichiers existants dans "C:\Folder "dont le nom de fichier contient le mot-clé" Apple ".

24
user

Pour développer la réponse de Henk, vous avez besoin de:

string rootFolderPath = @"C:\\SomeFolder\\AnotherFolder\\FolderCOntainingThingsToDelete";
string filesToDelete = @"*DeleteMe*.doc";   // Only delete DOC files containing "DeleteMe" in their filenames
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete);
foreach(string file in fileList)
{
    System.Diagnostics.Debug.WriteLine(file + "will be deleted");
//  System.IO.File.Delete(file);
}

SOYEZ TRÈS PRUDENT!

Notez que j'ai commenté la commande de suppression. Exécutez-le et testez-le soigneusement avant de le laisser supprimer quoi que ce soit!

Si vous souhaitez supprimer récursivement des fichiers dans TOUS les sous-dossiers du dossier racine, ajoutez System.IO.SearchOption.AllDirectories); à l'appel GetFiles.

Si vous faites cela, c'est aussi une très bonne idée de refuser de s'exécuter si le rootFolderPath est inférieur à environ 4 caractères (une simple protection contre la suppression de tout en C:\- J'y suis allé et fait ça et ce n'est pas amusant !!!)

52
Jason Williams

Vous pouvez utiliser System.IO.Directory.GetFiles() pour une liste des fichiers, au format chaîne [].

Ensuite, vous pouvez utiliser System.IO.File.ReadAllText() pour lire des fichiers complets, ou s'ils sont très volumineux, ouvrez un TextReader avec System.IO.File.OpenText().

Si vous recherchez un mot clé littéral, String.Contains() est tout ce dont vous avez besoin.

La suppression d'un fichier peut être effectuée avec System.IO.File.Delete(). Assurez-vous que le fichier est fermé à nouveau.

Edit, 2 exemples de GetFiles():

string[] fileNames = System.IO.Directory.GetFiles(@"C:\");
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");
8
Henk Holterman
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
    if (file.IndexOf("Apple", StringComparison.OrdinalIgnoreCase) >= 0)
        File.Delete(file);
});

ou

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
    Regex re = new Regex("Apple", RegexOptions.IgnoreCase);
    if (re.IsMatch(file))
        File.Delete(file);
});
6
Keith

Plus ou moins, cela:

string DeleteThis = "Apple";
string[] Files = Directory.GetFiles(@"C:\Folder");

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}
5
Kyle Rozendo
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("Apple".ToUpper())) File.Delete(file); });
0
Antony Koch