如何确保我可以在.NET中唯一标识目录路径

时间:2013-02-20 13:20:06

标签: c# .net

我刚刚在我的应用程序中发现了一个错误,其中Path.GetFullPath()没有为同一路径的不同表示返回完全相同的结果。在这种情况下,../include../include/正在返回c:\\...\\include&amp;分别为c:\\...\\include\\;因为我为dir名称保留Dictionary<string,...>,所以这会破坏事情。

如何解决这个问题,理想情况下,如果没有使用框架方法对字符串进行严格的kludgy检查?

3 个答案:

答案 0 :(得分:4)

../include可能指向目录文件(文件不必具有扩展名),../include/始终是目录,因为尾部斜杠。所以他们肯定不一样。

如果确定输入始终是目录(Path.GetFullPath()无法确定),你可以这样做:

path = Path.Combine(input, Path.DirectorySeparatorChar.ToString());

这样,所有输入都将被视为目录,而不是文件,Path.GetFullPath()将为两个变体返回相同的内容。

答案 1 :(得分:0)

他们不应该返回相同的结果。如果您需要检查路径实际上是文件还是目录,可以使用Path.GetFullPath("../include")而不使用尾部斜杠。如果以编程方式提供路径,则执行string.TrimEnd('\\'),然后使用以下命令检查路径是文件还是目录:

File.Exists()Directory.Exists()确定指定的路径是文件还是目录。

您需要确保通过插入/比较非尾随斜杠路径来完成所有表插入和搜索。

答案 2 :(得分:0)

做一个.TrimEnd(&#39; \&#39;)如果它是合理的。