c#使用过滤器删除文件夹中的文件
本文关键字:文件 文件夹 删除 过滤器 | 更新日期: 2023-09-27 18:05:24
我正在使用SharpDevelop写一个c#程序(不是控制台)。我想删除指定目录下的文件,但是能够排除文件开头、结尾或包含某些单词。
要完全删除文件夹中的所有文件,我使用以下命令:
private void clearFolder(string FolderName)
{
DirectoryInfo dir = new DirectoryInfo(FolderName);
foreach(FileInfo fi in dir.GetFiles())
{
fi.Delete();
}
foreach (DirectoryInfo di in dir.GetDirectories())
{
clearFolder(di.FullName);
di.Delete();
}
}
我像
那样使用它ClearFolder("NameOfFolderIWantToEmpty");
有没有办法修改这个,这样我就可以删除所有的文件和目录,除了那些文件和目录包含特定的单词?
例如:
CleanFolder(FolderToEmpty,ExcludeAllFileAndDirectoriesContaingThisPhrase);
所以如果我做了
CleanFolder("MyTestFolder","_blink");
它不会删除像
这样的文件和目录_blinkOne (file)
Test_blineGreen (file)
Test_blink5 (directory)
_blinkTwo (file within the Text_blink5 directory)
Folder_blink (empty directory)
但是会删除像
这样的文件和目录test (file)
test2 (directory)
test3_file (file within test2 directory)
test4 (empty directory)
我怀疑我可能不得不遍历每个文件和目录,每次检查一个匹配的过滤器,如果不匹配就删除它,但我不确定如何做到这一点。
可能是FileInfo()
和DirectoryInfo()
的什么?
有人可以帮助提供一个工作的例子吗?
测试FileInfo.Name
属性(字符串)StartsWith
或EndsWith
是否为指定字符串。
foreach (FileInfo fInfo in di.GetFiles())
{
if (!fInfo.Name.StartsWith("AAA") ||
!fInfo.Name.EndsWith("BBB"))
{
fInfo.Delete();
}
}
或者如果你在文件名中寻找一个单词,使用Contains
方法:
foreach (FileInfo fInfo in di.GetFiles())
{
if (!fInfo.Name.Contains("CCC"))
{
fInfo.Delete();
}
}
使用Directory.GetFiles(string, string)
方法来获取匹配模式的文件列表,并使用Enumerable.Except(IEnumerable<T>)
来获取您实际想要删除的文件。
string pattern = "*.*";
var matches = Directory.GetFiles(folderName, pattern);
foreach(string file in Directory.GetFiles(folderName).Except(matches))
File.Delete(file);
这里不需要使用DirectoryInfo,因为您似乎只关心操作目录中的文件。
if(!fi.Name.Contains("_blink"))
fi.Delete();
我想我有一个适合我的解决方案。在这里发布完整的代码,以便其他人可以使用它,调整它,和/或检查它可能的缺陷。这是我第一次使用StackOverFlow,知道我有这个可用的资源来搜索和提问的能力,人们可以实际帮助,这对我来说是一个很大的安慰,因为我是一个新的人所有这些东西。
谢谢大家!
//递归搜索目录并删除所有子目录和文件
//名称不包含给定的搜索模式
private void clearFolderWithFilter(string folderName, string filesToExclude)
{
DirectoryInfo dir = new DirectoryInfo(folderName);
foreach(FileInfo fi in dir.GetFiles())
{
if(!fi.Name.Contains(filesToExclude))
{
// System.Diagnostics.Debug.WriteLine("DELETING file " + fi + " because it does NOT contain '" + filesToExclude + "' ");
fi.Delete();
} else {
// System.Diagnostics.Debug.WriteLine("SAVING file " + fi + " because it contains '" + filesToExclude + "' ");
}
}
foreach (DirectoryInfo di in dir.GetDirectories())
{
if(!di.Name.Contains(filesToExclude))
{
// System.Diagnostics.Debug.WriteLine("DELETING directory " + di + " because it does NOT contain '" + filesToExclude + "' ");
clearFolderWithFilter(di.FullName, filesToExclude);
di.Delete();
} else {
// System.Diagnostics.Debug.WriteLine("SAVING directory " + di + " because it contains '" + filesToExclude + "' ");
}
}
}
用法:
clearFolderWithFilter(@"C:'Path'MyFolder","DoNotDelete_");