我有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