0

我有两个 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 学习资料吗?

4

3 回答 3

5

您可以使用带有过滤器的 FirstOrDefault

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

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

FileInfo destFile = fiArrNew6.First(file => file.Name == origFile.Name);
于 2012-04-17T15:12:34.963 回答
2

destFile不是 FileInfo,而是 linq 查询。将其名称更改为类似fileQuery然后

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

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

于 2012-04-17T15:08:59.580 回答
1

将 更改SelectWhere

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

Where返回一个IEnumerable<FileInfo>,使用Firstwith 将确保使用第一个此类事件(如果没有,它将引发异常)。

于 2012-04-17T15:09:05.730 回答