J’ai besoin de vérifier un répertoire pour voir s’il existe des fichiers dont le nom de fichier contient un mot clé spécifique et, le cas échéant, 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”.
Pour développer la réponse de Henk, vous avez besoin de:
ssortingng rootFolderPath = @"C:\\SomeFolder\\AnotherFolder\\FolderCOntainingThingsToDelete"; ssortingng filesToDelete = @"*DeleteMe*.doc"; // Only delete DOC files containing "DeleteMe" in their filenames ssortingng[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete); foreach(ssortingng 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 delete. Exécutez-le et testez-le soigneusement avant de le laisser supprimer quoi que ce soit!
Si vous souhaitez supprimer de manière récursive 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 rootFolderPath fait moins de 4 caractères environ (une simple protection contre la suppression de tout dans C: \ – j’y suis allé et je l’ai fait et c’est pas amusant! !!)
Vous pouvez utiliser System.IO.Directory.GetFiles()
pour obtenir 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, ouvrir un TextReader avec System.IO.File.OpenText()
.
Si vous recherchez un mot clé littéral, Ssortingng.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 à nouveau fermé.
Edit, 2 exemples de GetFiles()
:
ssortingng[] fileNames = System.IO.Directory.GetFiles(@"C:\"); ssortingng[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");
Plus ou moins, ceci:
ssortingng DeleteThis = "apple"; ssortingng[] Files = Directory.GetFiles(@"C:\Folder"); foreach (ssortingng file in Files) { if (file.ToUpper().Contains(DeleteThis.ToUpper())) { File.Delete(file); } }
new List(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.IndexOf("apple", SsortingngComparison.OrdinalIgnoreCase) >= 0) File.Delete(file); });
ou
new List(Directory.GetFiles(@"C:\Folder")).ForEach(file => { Regex re = new Regex("apple", RegexOptions.IgnoreCase); if (re.IsMatch(file)) File.Delete(file); });
new List(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); });