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

时间:2009-10-25 08:32:52

标签: c# file-io directory exists

我需要检查目录以查看是否有任何文件名包含特定关键字的文件,如果有,则删除它们。这可能吗?

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

5 个答案:

答案 0 :(得分:47)

要扩展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);
}

非常小心!

请注意,我已经注释掉了删除命令。运行它并仔细测试

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

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

答案 1 :(得分:8)

您可以将System.IO.Directory.GetFiles()用于文件列表,格式为字符串[]。

<击> 然后,您可以使用System.IO.File.ReadAllText()来阅读完整的文件,或者如果它们非常大,请使用System.IO.File.OpenText()打开TextReader。

如果您要查找文字关键字,则只需String.Contains()即可。

可以使用System.IO.File.Delete()删除文件。确保文件再次关闭。

编辑,GetFiles()的2个示例:

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

答案 2 :(得分:6)

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

答案 3 :(得分:5)

或多或少,这个:

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

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

答案 4 :(得分:0)

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