如果filename包含某个单词,则从目录中删除文件

use*_*ser 22 c# directory file-io exists

我需要检查一个目录,看看是否有文件名包含特定关键字的文件,如果有的话,要删除它们.这可能吗?

例如,删除C:\Folder文件名中包含关键字"Apple"的所有现有文件.

Jas*_*ams 50

要扩展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);
}
Run Code Online (Sandbox Code Playgroud)

要非常小心!

请注意,我已经注释掉了删除命令.运行它并仔细测试它,然后让它实际删除任何东西!

如果您希望以递归方式删除根文件夹的所有子文件夹中的文件,请添加System.IO.SearchOption.AllDirectories); 到GetFiles调用.

如果你这样做,如果rootFolderPath的长度小于4个字符,那么拒绝运行也是一个非常好的主意(一个简单的保护措施,不能删除C:\中的所有东西 - 我去过那里并且做到了这一点并不好玩! !!)

  • 并且不要忘记捕获异常,处理文件正在使用或访问被拒绝的情况等. (2认同)
  • 是的,那一点我留给读者练习;-) (2认同)

Hen*_*man 8

您可以使用System.IO.Directory.GetFiles()string []格式的文件列表.

然后你可以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");
Run Code Online (Sandbox Code Playgroud)


小智 6

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
    if (file.IndexOf("apple", StringComparison.OrdinalIgnoreCase) >= 0)
        File.Delete(file);
});
Run Code Online (Sandbox Code Playgroud)

要么

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
    Regex re = new Regex("apple", RegexOptions.IgnoreCase);
    if (re.IsMatch(file))
        File.Delete(file);
});
Run Code Online (Sandbox Code Playgroud)


Kyl*_*ndo 5

或多或少,这个:

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

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}
Run Code Online (Sandbox Code Playgroud)