如果我有两个DirectoryInfo对象,如何比较它们的语义相等性?例如,以下路径应全部视为等于C:\temp:
DirectoryInfo
C:\temp
C:\temp\
C:\temp\.
C:\temp\x\..\..\temp\.
以下内容可能等于也可能不等于C:\temp:
\temp
C:\
temp
C:\temp.
C:\temp...\
如果考虑当前的工作目录很重要,那么我可以自己弄清楚,所以这并不重要。尾随的点在窗口中被剥离,因此这些路径确实应该相等- 但它们在unix中不被剥离,因此在mono下,我期望其他结果。
区分大小写是可选的。这些路径可能存在或不存在,并且用户可能具有该路径的权限-我更喜欢一种快速健壮的方法,该方法不需要任何I / O(因此无需权限检查),但是如果有内置的东西-我也会对“足够好”的东西感到满意…
从这个答案中,该方法可以处理一些边缘情况:
public static string NormalizePath(string path) { return Path.GetFullPath(new Uri(path).LocalPath) .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) .ToUpperInvariant(); }
原始答案中有更多详细信息。像这样称呼它:
bool pathsEqual = NormalizePath(path1) == NormalizePath(path2);
应该同时适用于文件和目录路径。