文件信息 - 从一个文件信息[] 中选择一个文件

本文关键字:文件 一个 信息 选择 | 更新日期: 2023-09-27 18:31:20

我有两个FileInfo[]数组,我想比较具有相同名称的文件,了解其文件大小和上次修改日期。但是,如何从具有特定名称的 FileInfo[] 中选择文件呢?

我的代码不起作用,因为我无法使用 FileInfo.Select 来获取新的 FileInfo 。有什么线索吗?

        foreach (FileInfo origFile in fiArrOri6)
        {
            FileInfo destFile = fiArrNew6.Select(file => file.Name == origFile.Name);
            if (origFile.Length != destFile.Length || origFile.LastWriteTime != destFile.LastWriteTime)
            {
                //do sth.
            }
        } 

感谢您的任何帮助:)

顺便说一句。这个问题的任何其他迷人的解决方案都会很棒。顺便说一句。#2 : 有人有很好的FileInfo学习材料吗?

文件信息 - 从一个文件信息[] 中选择一个文件

您可以使用采用过滤器的 FirstOrDefault

FileInfo destFile = fiArrNew6.FirstOrDefault(file => file.Name == origFile.Name);

或者,如果您不想要默认值,则可以使用采用筛选器的等效 First

FileInfo destFile = fiArrNew6.First(file => file.Name == origFile.Name);
destFile不是

FileInfo,它是一个linq查询。 将其名称更改为类似 fileQuery 的名称,然后

var fileQuery = fiArrNew6.Where(file => file.Name == origFile.Name);
var destFile = fileQuery.FirstOrDefault();
if (destFile != null)
    //...

额外提示:避免使用像fiArrNew6这样的名称;它们令人困惑。 像newFiles这样的描述性名称更易于阅读,并且它们允许您更改代码而无需重命名变量。

Select更改为Where

FileInfo destFile = fiArrNew6.Where(file => file.Name == origFile.Name).First();

Where将返回一个IEnumerable<FileInfo>,使用 First 将确保使用第一个这样的事件(如果没有,它将抛出异常)。