我正在尝试比较两个目录,以查看目录 1 中哪些文件不在目录 2 中。我有以下代码:
System.IO.DirectoryInfo dir1 = new System.IO.DirectoryInfo(pathA);
System.IO.DirectoryInfo dir2 = new System.IO.DirectoryInfo(pathB);
IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.PRN");
IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.PRN");
IEnumerable<System.IO.FileInfo> list3 = list1.Except(list2);
Console.WriteLine("The following files are in list1 but not list2:");
foreach (var v in list3)
{
Console.WriteLine(v);
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
当它运行时,它清楚地列出了目录 1 中的所有文件,但其中许多文件已经在目录 2 中。我只需通过 Windows 资源管理器查看文件名即可看到这一点。我错过了什么?
编辑:
我相信问题出在文件比较部分。我试图让它忽略文件扩展名的大小写。我试过这个:
class FileCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
{
public FileCompare() { }
public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
{
//return (f1.Name.ToUpper == f2.Name.ToUpper &&
// f1.Length == f2.Length);
return (string.Equals(f1.Name, f2.Name, StringComparison.OrdinalIgnoreCase) && f1.Length == f2.Length);
}
public int GetHashCode(System.IO.FileInfo fi)
{
string s = String.Format("{0}{1}", fi.Name, fi.Length);
return s.GetHashCode();
}
}
但这仍然行不通。你可以看到我注释掉了另一个尝试,只是在比较中将所有内容都设为大写,但它不会那样做。