Удаление файлов из каталога, если имя файла содержит определенное слово

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

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

Ответы

Ответ 1

Чтобы расширить ответ Henk, вам необходимо:

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

ОЧЕНЬ ОСТОРОЖНО!

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

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

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

Ответ 2

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

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

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

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

Изменить, 2 примера GetFiles():

string[] fileNames = System.IO.Directory.GetFiles(@"C:\");
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");

Ответ 3

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

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

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}

Ответ 4

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

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); });