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

标签 c# .net path filenames

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

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

一般来说,组合路径字符串的简洁方法是使用 Path.Combine method :

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

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

正如在其他几个问题(例如 thisthis )中所建议的那样,GetFullPath method应该应用于结果:

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

问题在于 GetFullPath 实际上查看的是文件系统,而不仅仅是处理路径字符串。来自docs :

The file or directory specified by path is not required to exist. (...) However, if path does exist, the caller must have permission to obtain path information for path. Note that unlike most members of the Path class, this method accesses the file system.

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

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

最佳答案

您可以使用 Uri 类的 AbsolutePath

var path = new Uri(Path.Combine(@"C:\abc\xyz", @"..\def")).AbsolutePath;

关于c# - 如何在没有任何权限检查的情况下从相对路径获取最小绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46629952/

相关文章:

path - 在 Cygwin 中设置 LD_LIBRARY_PATH

c# - 下载动态生成的图像而不是在浏览器中显示

c# SQL Compact 监控 FileSystemWatcher 或 SqlDependency

c# - "Store"稍后在 C# 中使用的类型参数?

node.js - 无法使用任何已安装的 npm 软件包 : Not Recognized

python - 为什么在文件名末尾添加点会导致 python 认为该文件存在?

c# - 如何将文本框的输入转换为十进制数

c# - 在 Linq-To-Sql 中避免 "Nullable object must have a value."

c# - 为 HttpClient 中的 Get 操作显式设置内容类型 header

c# - 如何检查代码文件的有效性?