gpt4 book ai didi

c# - FileInfo 从列表中删除文件

转载 作者:行者123 更新时间:2023-11-30 20:40:07 25 4
gpt4 key购买 nike

我在 C# 中有一个方法,它以这种方式获取目录中的文件:

FileInfo[] fileInfo = new DirectoryInfo(mypath).GetFiles();

目录中的某些文件不是我们需要处理的文件(唯一知道的方法是通过其内容,而不是文件扩展名)因此我们想将它们从 FileInfo 列表中删除(而不是从磁盘中删除) .

我正在寻找一种简单的方法来排除 FileInfo 数组中的文件,但似乎没有办法。

这是检查用户选择的目录中我们只需要的文件的完整代码:

int number_of_files = fileInfo.Length;
for (int i = 0; i < number_of_files ; ++i)
{
string file= fileInfo[i].FullName;
BinaryReader br = new BinaryReader(new FileStream(file, FileMode.Open, FileAccess.Read), Encoding.ASCII);
byte[] preamble = new byte[132];
br.Read(preamble, 0, 132);
if (preamble[128] != 'D' || preamble[129] != 'I' || preamble[130] != 'C' || preamble[131] != 'M')
{
if (preamble[0] + preamble[1] != 0008)
{
return; //Rather than return, remove the file in question from the list....
}
}
br.Dispose();
}

我该怎么做?

最佳答案

与其从 FileInfo[] 数组中删除文件,不如考虑创建一个单独的列表来收集您确实想要保留的所有文件:

FileInfo[] files = new DirectoryInfo(mypath).GetFiles();
List<FileInfo> filteredFiles = new List<FileInfo>();
foreach (FileInfo file in fileInfos)
{
string file= fileInfo[i].FullName;
using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read))
using (var br = new BinaryReader(stream, Encoding.ASCII))
{
byte[] preamble = new byte[132];
br.Read(preamble, 0, 132);
if (preamble[128] != 'D' || preamble[129] != 'I' || preamble[130] != 'C' || preamble[131] != 'M')
{
if (preamble[0] + preamble[1] != 0008)
{
// skip this file
continue;
}

// keep the file
filteredFiles.Add(file);

// do something else with the file
}
}
}

您应该考虑只是为了过滤而阅读文件是否真的值得。如果您稍后最终也处理过滤后的文件,您真的应该考虑同时进行,这样您就不必打开文件两次(一次是为了弄清楚您想要保留它,一次是为了实际处理它)。这样,您也可以摆脱 filteredFiles 列表,因为您可以跳过您不感兴趣的文件并处理其他文件。

关于c# - FileInfo 从列表中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com