当前位置: 首页 > 编程语言 > C#

如何判断两个DirectoryInfo对象是否指向同一个目录?分享

时间:2023-04-10 23:29:28 C#

如何判断2个DirectoryInfo对象是否指向同一个目录?我有2个DirectoryInfo对象,想检查它们是否指向同一个目录。有没有比比较他们的全名更好的方法?请忽略链接大小写。这就是我所拥有的。DirectoryInfodi1=newDirectoryInfo(@"c:temp");DirectoryInfodi2=newDirectoryInfo(@"C:TEMP");if(di1.FullName.ToUpperInvariant()==di2.FullName.ToUpperInvariant()){//它们是一样的...}谢谢。在Linux下,您可以比较两个文件的INode号相同的地方。但是在Windows下,并没有这样的概念,至少在我看来是这样。您需要使用p/invoke来解析链接(如果有)。比较字符串是你能做的最好的事情。请注意,使用String.Compare(str1,str2,StringComparison.InvariantCultureIgnoreCase)比您的方法快一点。您可以改用Uri对象。但是,您的Uri对象必须指向这些目录中的“文件”。该文件实际上不必存在。privatevoidCompareStrings(){stringpath1=@"c:testrootpath";stringpath2=@"C:TEST..TESTROOTPATH";stringpath3=@"C:TeStRoOtPaTh";stringfile1=Path.Combine(path1,"log.txt");字符串文件2=路径。Combine(path2,"log.txt");字符串文件3=路径。Combine(path3,"log.txt");Uriu1=newUri(file1);Uriu2=newUri(file2);Uriu3=newUri(file3);Trace.WriteLine(string.Format("u1==u2?{0}",u1==u2));Trace.WriteLine(string.Format("u2==u3?{0}",u2==u3));这将打印:u1==u2?真的u2==u3吗?真正的灵感来自这里:staticpublicboolSameDirectory(stringpath1,stringpath2){return(0==String.Compare(System.IO.Path.GetFullPath(path1).TrimEnd('\'),System.IO.Path.GetFullPath(path2).TrimEnd('\'),StringComparison.InvariantCultureIgnoreCase));也适用于文件......(顺便说一句,理论上这个问题是重复的,但这是原始问题,另一个有最多的答案......)HTH不区分大小写的比较是你能得到的最好的。将其解压到辅助类中,以防人类想出更好的方法。publicstaticclassDirectoryInfoExtensions{publicstaticboolIsEqualTo(这个DirectoryInfoleft,DirectoryInforight){returnleft.FullName.ToUpperInvariant()==right.FullName.ToUpperInvariant();}}并使用:if(di1.IsEqualTo(di2)){//Codehere}我为最近的项目编写的一些扩展方法包括执行此操作的方法:以上是C#学习教程:Howtocheckif2DirectoryInfoobjects指向同一个目录?所有分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——publicstaticboolIsSame(thisDirectoryInfothat,DirectoryInfoother){//zipextensionwould在这里不起作用,因为它截断了更长的//可枚举的,导致误报vare1=that.EnumeratePathDirectories().GetEnumerator();vare2=other.EnumeratePathDirectories().GetEnumerator();while(true){varm1=e1.MoveNext();varm2=e2.MoveNext();如果(m1!=m2)返回false;//长度不一样if(!m1)returntrue;//完成枚举,没有发现差异if(!e1.Current.Name.Trim().Equals(e2.Current.Name.Trim(),StringComparison.InvariantCultureIgnoreCase))返回假;//路径中的当前文件夹不同}}publicstaticIEnumerableEnumeratePathDirectories(thisDirectoryInfodi){varstack=newStack();DirectoryInfocurrent=di;while(current!=null){stack.Push(current);当前=当前.父级;}返回堆栈;}//与这个问题无关,但仍然有用:publicstaticboolIsSame(thisFileInfothat,FileInfoother){returnthat.Name.Trim().Equals(other.Name.Trim(),StringComparison.InvariantCultureIgnoreCase)&&that.Directory.IsSame(其他.Directory);}publicstaticIEnumerableEnumeratePathDirectories(thisFileInfofi){returnfi.Directory.EnumeratePathDirectories();}publicstaticboolStartsWith(thisFileInfofi,DirectoryInfodirectory){returnfi.Directory.StartsWith(directory);}publicstaticboolStartsWith(thisDirectoryInfodi,DirectoryInfodirectory){returndi.EnumeratePathDirectories().Any(d=>d.IsSame(directory));}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: