Удаление файлов из каталога, если имя файла содержит определенное слово
Мне нужно проверить каталог, чтобы увидеть, есть ли файлы, имя файла которых содержит определенное ключевое слово, а если есть, удалить их. Возможно ли это?
Например, удалите все существующие файлы в "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); });