29

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

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

4

5 回答 5

59

要扩展 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:\ 中的所有内容的简单保护 - 我去过那里并这样做了,这并不好玩! !!)

于 2009-10-25T08:54:44.673 回答
8

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

然后你可以用它System.IO.File.ReadAllText()来阅读完整的文件,或者如果它们很大,用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");
于 2009-10-25T08:36:46.380 回答
7
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);
});
于 2011-11-23T16:33:45.283 回答
5

或多或少,这是:

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

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}
于 2009-10-25T08:58:06.570 回答
0
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); });
于 2009-10-25T11:20:13.373 回答