0

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

如何解决这个问题,最好不要对字符串进行令人讨厌的检查,而是使用框架方法?

4

3 回答 3

4

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

如果确定输入始终是目录(Path.GetFullPath()无法确定),您可以执行以下操作:

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

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

于 2013-02-20T13:34:10.880 回答
0

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

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

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

于 2013-02-20T13:24:29.293 回答
0

如果可行,请执行 .TrimEnd('\') 。

于 2013-02-20T13:29:07.610 回答