我想根据自定义差异比较获得两个目录的差异。我环顾四周,发现我根据我的要求修改了这段代码,但不知何故它返回了不正确的结果。
我想要两个 FileNamecomparions,一个按名称,一个按大小
class FileNameCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
{
public FileNameCompare() { }
public bool Equals(System.IO.FileInfo file1, System.IO.FileInfo file2)
{
return (file1.Name == file2.Name);
}
public int GetHashCode(System.IO.FileInfo fileInfo)
{
string fileString = String.Format("{0}{1}", fileInfo.Name, fileInfo.Length);
return fileString.GetHashCode();
}
}
在我的代码中,我正在调用
//Compare files
FileNameCompare fileNameCompare = new FileNameCompare();
bool areIdentical = baseList.SequenceEqual(compareList, fileNameCompare);
IEnumerable<FileInfo> diff = (from file in baseList
select file).Except(compareList, fileNameCompare);
IEnumerable baseList 类型的 baselist 和 comparelist
现在,当我有两个具有相同文件名但大小不同的目录时,areidentical 为真,但差异仍然在 baselist 中有一个文件。
我做错了什么?
在同一个目录上,我需要运行名称和大小比较,我需要确切地知道哪些文件的名称和大小不同,这就是我分离比较的原因。
编辑:
我需要找到大小不同的文件(两个目录中都存在),所以根据 Ramoku 的提示,这就是我所做的。
//Get common directories between baselist and comparelist
IEnumerable<FileInfo> commonList = (from file in baseList
select file).Intersect(compareList, fileNameCompare);
IEnumerable<FileInfo> diffInListBySize = (from file in commonList
select file).Except(compareList, fileSizeCompare);