如何在没有任何权限检查的情况下从相对路径获取最小绝对路径?

2024-03-15

假设我有两个路径字符串,一个是绝对路径字符串,例如@"C:\abc\xyz",以及一个相关的,例如@"..\def"。我如何可靠地将它们组合起来以产生最小形式@"C:\abc\def"?

由于该过程应该适用于 .NET 的 I/O API 支持的任何形式的路径(即 .NET 或 Mono 当前运行的系统的本机路径,或者类似 UNC 路径等),因此手动字符串操作似乎是一个太不可靠的解决方案。

一般来说,组合路径字符串的简洁方法是使用Path.Combine method https://msdn.microsoft.com/en-us/library/system.io.path.combine(v=vs.110).aspx:

Path.Combine(@"C:\abc\xyz", @"..\def")

不幸的是,它并没有最小化路径和返回C:\abc\xyz\..\def.

正如其他几个问题中所建议的(例如this https://stackoverflow.com/questions/38773107/get-absolute-path-from-relative-path-c-sharp, or this https://stackoverflow.com/questions/42728678/convert-relative-path-to-absolute-path), the GetFullPath method https://msdn.microsoft.com/en-us/library/system.io.path.getfullpath(v=vs.110).aspx应该应用于结果:

Path.GetFullPath(Path.Combine(@"C:\abc\xyz", @"..\def"))

问题在于GetFullPath实际上查看文件系统而不仅仅是处理路径字符串。来自docs https://msdn.microsoft.com/en-us/library/system.io.path.getfullpath(v=vs.110).aspx:

由指定的文件或目录path不需要存在。 (...)但是,如果path确实存在,调用者必须有权限获取路径信息path。请注意,与 Path 类的大多数成员不同,此方法访问文件系统。

所以,GetFullPath如果我只想最小化任意路径字符串,则不起作用:根据运行应用程序的系统上是否存在该路径,该方法可能会失败并显示SecurityException如果用户无权访问该路径。

那么,如何可靠地组合可以处理的路径字符串System.IO返回最短可能绝对路径的方法?


您可以使用 Uri 类的 AbsolutePath

var path = new Uri(Path.Combine(@"C:\abc\xyz", @"..\def")).AbsolutePath;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有任何权限检查的情况下从相对路径获取最小绝对路径? 的相关文章

随机推荐