Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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); });