按名称而不是大小在目录中查找相同的文件
本文关键字:查找 文件 | 更新日期: 2023-09-27 18:31:09
我想根据自定义差异比较获取两个目录的差异。我环顾四周,发现了我根据要求修改的这段代码,但不知何故它返回了不正确的结果。
我想有两个文件名比较,一个按名称,一个按大小
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);
IE可枚举基本列表类型的基线列表和比较列表
现在,当我有两个文件名相同但大小不同的目录时,相同是真的,但 diff 在 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);
这是你的意思还是我错过了什么?
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 && file1.Length == file2.Length;
}
public int GetHashCode(System.IO.FileInfo fileInfo)
{
string fileString = String.Format("{0}{1}", fileInfo.Name, fileInfo.Length);
return fileString.GetHashCode();
}
}
GetHashCode
使用文件的大小来确定相等性。
改变:
public int GetHashCode(System.IO.FileInfo fileInfo)
{
return fileInfo.Name.GetHashCode();
}
您可以使用
FullName
属性,它将提供文件的完整路径:
class FileNameCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
{
public FileNameCompare() { }
public bool Equals(System.IO.FileInfo file1, System.IO.FileInfo file2)
{
return file1.FullName == file2.FullName;
}
public int GetHashCode(System.IO.FileInfo fileInfo)
{
string fileString = String.Format("{0}{1}", fileInfo.Name, fileInfo.Length);
return fileString.GetHashCode();
}
}
我没有看到您实际在哪里比较文件大小。尝试使用 FileInfo.Length
获取文件的大小。有关其他信息,请参阅 MSDN
http://msdn.microsoft.com/en-us/library/system.io.fileinfo.length.aspx