gpt4 book ai didi

c# - 比较两个目录时遇到问题

转载 作者:太空狗 更新时间:2023-10-30 00:25:37 25 4
gpt4 key购买 nike

我正在尝试比较两个目录以查看目录 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();
}
}

但这仍然不起作用。您可以看到我注释掉了另一种尝试,即在比较中将所有内容都设为大写,但它不会这样做。

最佳答案

您将需要使用 Except() 的重载版本并向其传递 IEqualityComparer 的自定义实现,它准确地指示您定义精确匹配的条件两个 FileInfo 对象。

参见此处的示例并根据您自己的需要进行修改: http://msdn.microsoft.com/en-us/library/bb336390.aspx

关于c# - 比较两个目录时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16449010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com