FileInfo - 从一个FileInfo []中选择一个文件

时间:2012-04-17 15:06:10

标签: c# compare fileinfo

我有两个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提供了很好的学习材料吗?

3 个答案:

答案 0 :(得分:4)

您可以使用FirstOrDefault that takes a filter

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

或者,如果您不想使用默认值,则可以使用等效的First that takes a filter

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

答案 1 :(得分:2)

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

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

额外提示:避免像fiArrNew6这样的名字;他们很困惑。像newFiles这样的描述性名称更容易阅读,它们允许您更改代码而无需重命名变量。

答案 2 :(得分:1)

Select更改为Where

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

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