【发布时间】:2010-10-19 19:15:54
【问题描述】:
从目录中获取文件时如何排除某些文件类型?
我试过了
var files = Directory.GetFiles(jobDir);
但是这个功能好像只能选择你想包含的文件类型,不能排除。
【问题讨论】:
-
@TarmoPikaro,我认为这是另一种方式。你的问题是我的欺骗。
从目录中获取文件时如何排除某些文件类型?
我试过了
var files = Directory.GetFiles(jobDir);
但是这个功能好像只能选择你想包含的文件类型,不能排除。
【问题讨论】:
你应该自己过滤这些文件,你可以这样写:
var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml"));
【讨论】:
var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml", true));
var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml", StringComparison.OrdinalIgnoreCase));
GetFiles 返回string[],我想让我的代码保持相同的约定,我只是打了一个类似的电话:Directory.GetFiles(jobDir).Where(...).ToArra(),还有更多这样的选择!
我知道,这是一个古老的要求,但对我来说它总是很重要。
如果您想排除文件扩展名列表:(基于https://stackoverflow.com/a/19961761/1970301)
var exts = new[] { ".mp3", ".jpg" };
public IEnumerable<string> FilterFiles(string path, params string[] exts) {
return
Directory
.GetFiles(path)
.Where(file => !exts.Any(x => file.EndsWith(x, StringComparison.OrdinalIgnoreCase)));
}
【讨论】:
你可以试试这样的:
var allFiles = Directory.GetFiles(@"C:\Path\", "");
var filesToExclude = Directory.GetFiles(@"C:\Path\", "*.txt");
var wantedFiles = allFiles.Except(filesToExclude);
【讨论】:
DirectoryInfo.GetFiles():它返回一个 FileInfo 数组(而不是字符串),一个不可比较/不可相等的类。
我猜你可以使用 lambda 表达式
var files = Array.FindAll(Directory.GetFiles(jobDir), x => !x.EndWith(".myext"))
【讨论】:
你可以试试这个,
var directoryInfo = new DirectoryInfo("C:\YourPath");
var filesInfo = directoryInfo.GetFiles().Where(x => x.Extension != ".pdb");
【讨论】:
Afaik 无法指定排除模式。 您必须手动完成,例如:
string[] files = Directory.GetFiles(myDir);
foreach(string fileName in files)
{
DoSomething(fileName);
}
【讨论】:
这是我在上面阅读的答案的版本
List<FileInfo> fileInfoList = ((DirectoryInfo)new DirectoryInfo(myPath)).GetFiles(fileNameOnly + "*").Where(x => !x.Name.EndsWith(".pdf")).ToList<FileInfo>();
【讨论】:
我在寻找一种方法来执行此操作时遇到此问题,其中排除可以使用搜索模式规则,而不仅仅是 EndWith 类型逻辑。
例如搜索模式通配符说明符匹配:
这可以用于上述情况,如下所示。
string dir = @"C:\Temp";
var items = Directory.GetFiles(dir, "*.*").Except(Directory.GetFiles(dir, "*.xml"));
或者排除本来应该包含的项目。
string dir = @"C:\Temp";
var items = Directory.GetFiles(dir, "*.txt").Except(Directory.GetFiles(dir, "*HOLD*.txt"));
【讨论】:
我用过
Directory.GetFiles(PATH, "*.dll"))
路径是:
公共静态字符串_PATH = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
【讨论】:
string[] filesToDelete = Directory.GetFiles(@"C:\Temp", "*.der");
foreach (string fileName in filesToDelete)
{
File.Delete(fileName);
}
【讨论】: