【问题标题】:FileInfo remove file from listFileInfo 从列表中删除文件
【发布时间】:2015-11-14 13:37:08
【问题描述】:

我在 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();
}

任何想法我该怎么做?

【问题讨论】:

  • 那么你如何表达你不需要的那些?
  • 我添加了更多信息,不取决于文件扩展名,重要的是文件内容

标签: c# fileinfo


【解决方案1】:

与其从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 列表,因为您可以跳过您不感兴趣的文件并处理其他文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多