如果文件名包含某个单词,则从目录中删除文件
我需要检查目录以查看是否有任何文件的文件名包含特定关键字,如果有,删除它们。这可能吗?如果文件名包含某个单词,则从目录中删除文件
例如,删除其文件名包含关键字“苹果”,“C:\Folder
”所有现有文件。
为了扩大在亨克的答案,你需要:
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删除一切简单的保护:\ - 我一直在那里,做起来难这和它的不好玩!)
您可以使用System.IO.Directory.GetFiles()
到文件列表中的String []格式。
然后你可以使用
System.IO.File.ReadAllText()
阅读完整的文件,或者如果他们是非常大的,打开的TextReader与
System.IO.File.OpenText()
。
如果你正在寻找一个文字关键字,String.Contains()
是你所需要的。
删除文件可以用System.IO.File.Delete()
完成。确保文件再次关闭。
编辑的GetFiles()
2个例子:
string[] fileNames = System.IO.Directory.GetFiles(@"C:\");
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");
哎呦,猜我应该说它有点不同。我不需要检查文件本身,而只需检查文件名。 – user 2009-10-25 08:39:38
然后您可以跳过ReadAllText/TextReader步骤。 – 2009-10-25 08:40:22
没有必要读取所有文本。例如。如果文件从Apple开始,它是50mb ...更好的方法是使用幻灯片窗口顺序读取文件。 – 2009-10-25 08:40:30
或多或少,这样的:
string DeleteThis = "apple";
string[] Files = Directory.GetFiles(@"C:\Folder");
foreach (string file in Files)
{
if (file.ToUpper().Contains(DeleteThis.ToUpper()))
{
File.Delete(file);
}
}
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); });
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);
});
不要忘记捕捉异常,处理情况下的文件正在使用,或者访问被拒绝,等 – Bryan 2009-10-25 09:17:53
是啊,这一点我作为练习留给读者;-) – 2009-10-25 14:01:26
谢谢。也添加了catch例外。 – user 2009-10-26 05:55:33