如何确保我可以在.NET中唯一地标识目录路径
本文关键字:唯一 标识 路径 NET 何确保 确保 我可以 | 更新日期: 2023-09-27 18:00:25
我刚刚在我的应用程序中发现了一个错误,其中Path.GetFullPath()
对于同一路径的不同表示不能完全返回相同的结果。在这种情况下,../include
和../include/
正在返回c:''...''include
&CCD_ 5;由于我为目录名称维护了一个Dictionary<string,...>
,这就破坏了一切。
如何解决这一问题,理想情况下不需要对字符串进行糟糕的笨拙检查,而是使用框架方法?
../include
可能指向目录或文件(文件不必有扩展名),而../include/
由于尾部斜杠而始终是目录。所以他们肯定不一样。
如果您确定输入始终是目录(Path.GetFullPath()
无法确定),则可以执行:
path = Path.Combine(input, Path.DirectorySeparatorChar.ToString());
这样,所有输入都将被视为目录,而不是文件,并且Path.GetFullPath()
将为两种变体返回相同的结果。
如果合理,请执行.TrimEnd('''')。
它们不应该返回相同的结果。如果您需要检查路径实际上是一个文件还是一个目录,您可以使用不带尾部斜杠的Path.GetFullPath("../include")
。如果路径是用程序提供的,则执行string.TrimEnd('''')
,然后使用检查路径是否为文件或目录
File.Exists()和Directory.Exists()来确定指定的路径是文件还是目录。
您需要确保所有的表插入和搜索都是通过插入/比较非尾部斜杠路径来完成的。