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 ".
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 !!!)
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");
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);
});
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);
}
}
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("Apple".ToUpper())) File.Delete(file); });