我有一个foreach语句,它是此函数的一部分:
try
{
string pathToFiles = sourceTB.Text;
DirectoryInfo dirInfo = new DirectoryInfo(pathToFiles);
int i = 0;
foreach (var files in dirInfo.EnumerateFiles())
{
//Do stuff here
}
MessageBox.Show("Process Successful", "Completed");
}
catch
{
MessageBox.Show("Process failed", "Failed");
}
我希望能够对其进行编码,以便它能够读取所选文件夹的全部内容(这样可以正常工作),但我正在努力使其能够跳过具有特定文件扩展名的任何文件。
例如,如果文件夹中的每个文件都是.txt文件,我想省略.jpg文件。
我尝试了几种方法来实现这一目标,例如:
var allFilesFromFolder = Directory.GetFiles(pathToFiles);
var filesToExclude = Directory.GetFiles(pathToFiles, "*.jpg");
var filetoInclude = allFilesFromFolder.Except(filesToExclude);
和此:
var files = Directory.GetFiles(pathToFiles).Where(name => !name.EndsWith(".jpg"));
但是这两个都会给代码带来错误,并且在遍历文件时不适合foreach循环。
有没有办法实现这个目标?
答案 0 :(得分:2)
您可以准备一个您不想处理的扩展列表,然后在枚举DirectoryInfo.EnumerateFiles返回的FileInfo类时使用该列表
List<string> excluded = new List<string>() {".jpg", ".png"};
foreach (var file in dirInfo.EnumerateFiles().Where(x => !excluded.Contains(x.Extension))
{
//Do stuff here
}
答案 1 :(得分:0)
您尝试这样做的方式应该可以正常工作,但您也可以在原始代码中包含一个模式,例如,这将为您提供所有文本文件:
foreach (var file in dirInfo.EnumerateFiles("*.txt"))
{
//Do stuff here
}
另一种方法是保留原始代码,然后放入并检查内部扩展名:
foreach (var file in dirInfo.EnumerateFiles("*.txt"))
{
if(file.Extension == ".jpg")
continue;
//Do stuff here
}