我刚刚在我的应用程序中发现了一个错误,其中Path.GetFullPath()
没有为同一路径的不同表示返回完全相同的结果。在这种情况下,../include
和../include/
正在返回c:\\...\\include
&分别为c:\\...\\include\\
;因为我为dir名称保留Dictionary<string,...>
,所以这会破坏事情。
如何解决这个问题,理想情况下,如果没有使用框架方法对字符串进行严格的kludgy检查?
答案 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;)如果它是合理的。