我有2个文件集合作为List<FileInfo>
。我目前使用2 x foreach
来遍历每个集合并匹配文件(如下所示)。有没有更快的方法在LINQ和.RemoveAt
这样做,当发现。使用LINQ列表<FileInfo>比较文件使用LINQ C#
我需要文件名和文件长度匹配。
var sdinfo = new DirectoryInfo(srcPath); var ddinfo = new DirectoryInfo(dstPath); var sFiles = new List<FileInfo>(sdinfo.GetFiles("*", SearchOption.AllDirectories)); var dFiles = new List<FileInfo>(ddinfo.GetFiles("*", SearchOption.AllDirectories)); foreach (var sFile in sFiles) { bool foundFile = false; int i = 0; foreach (var dFile in dFiles) { if (sFile.Name == dFile.Name && sFile.Length == dFile.Length) { foundFile = true; dFiles.RemoveAt(i); } i += 1; } }
干杯。以上你从sFiles
是在dFiles
缺席所有文件
private class FileInfoComparer : IEqualityComparer<FileInfo>
{
public bool Equals(FileInfo x, FileInfo y)
{
return x == null ? y == null : (x.Name.Equals(y.Name, StringComparison.CurrentCultureIgnoreCase) && x.Length == y.Length);
}
public int GetHashCode(FileInfo obj)
{
return obj.GetHashCode();
}
}
sFiles = sFiles.Except(dFiles, new FileInfoComparer()).ToList();
在这个例子中:
我假设您的示例代码中存在拼写错误。 sdinfo和ddinfo都使用srcPath。见行1和2 – 2014-09-30 23:28:09
是的,这是一个O型。好地方,欢呼声。编辑。 – 2014-10-01 00:29:19