我刚刚在我的应用程序中发现了一个错误,对于同一路径的不同表示,Path.GetFullPath()
它不会返回完全相同的结果。在这种情况下,../include
和../include/
分别返回c:\\...\\include
& c:\\...\\include\\
; 因为我维护了一个Dictionary<string,...>
目录名称,所以这会破坏事情。
如何解决这个问题,最好不要对字符串进行令人讨厌的检查,而是使用框架方法?
../include
可能指向目录或文件(文件不必具有扩展名),并且../include/
由于尾部斜杠而始终是目录。所以他们肯定不一样。
如果您确定输入始终是目录(Path.GetFullPath()
无法确定),您可以执行以下操作:
path = Path.Combine(input, Path.DirectorySeparatorChar.ToString());
这样,所有输入都将被视为目录,而不是文件,并且Path.GetFullPath()
对于两种变体都将返回相同的内容。
他们不应该返回相同的结果。如果您需要检查路径是否实际上是文件或目录,您可以使用Path.GetFullPath("../include")
不带斜杠。如果路径是以编程方式提供的,则执行 a string.TrimEnd('\\')
然后检查路径是文件还是目录,使用:
File.Exists()和Directory.Exists()来判断指定的路径是文件还是目录。
您需要确保通过插入/比较非尾随斜杠路径来完成所有表格插入和搜索。
如果可行,请执行 .TrimEnd('\') 。