Удалить файлы из каталога, если имя файла содержит определенное слово - PullRequest
22 голосов
/ 25 октября 2009

Мне нужно проверить каталог, чтобы увидеть, есть ли какие-либо файлы, имя файла которых содержит определенное ключевое слово, и, если они есть, удалить их. Возможно ли это?

Например, удалите все существующие файлы в «C:\Folder», имя файла которых содержит ключевое слово «Apple».

Ответы [ 5 ]

47 голосов
/ 25 октября 2009

Чтобы расширить ответ Хенка, вам нужно:

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);
}

БУДЬТЕ ОЧЕНЬ ОСТОРОЖНЫ!

Обратите внимание, что я закомментировал команду удаления. Запустите его и протестируйте , осторожно , прежде чем позволить ему действительно удалить что-либо!

Если вы хотите рекурсивно удалить файлы во ВСЕХ подпапках корневой папки, добавьте, System.IO.SearchOption.AllDirectories); на вызов GetFiles.

Если вы сделаете это, это также будет очень хорошей идеей отказаться от запуска, если rootFolderPath имеет длину менее 4 символов (простая защита от удаления всего в C: \ - Я был там и сделали то и не весело !!!)

8 голосов
/ 25 октября 2009

Вы можете использовать System.IO.Directory.GetFiles() для списка файлов в формате строки [].

Затем вы можете использовать System.IO.File.ReadAllText() для чтения полных файлов или, если они очень большие, открыть TextReader с System.IO.File.OpenText().

Если вы ищете буквальное ключевое слово, String.Contains() - это все, что вам нужно.

Удалить файл можно с помощью System.IO.File.Delete(). Убедитесь, что файл снова закрыт.

Редактировать, 2 примера GetFiles():

string[] fileNames = System.IO.Directory.GetFiles(@"C:\");
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");
6 голосов
/ 23 ноября 2011
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
    if (file.IndexOf("apple", StringComparison.OrdinalIgnoreCase) >= 0)
        File.Delete(file);
});

или

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
    Regex re = new Regex("apple", RegexOptions.IgnoreCase);
    if (re.IsMatch(file))
        File.Delete(file);
});
5 голосов
/ 25 октября 2009

Более или менее, это:

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

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}
0 голосов
/ 25 октября 2009
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); });
...