gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:06 26 4
gpt4 key购买 nike

比如说,我有两个路径字符串,一个是绝对路径字符串,例如 @"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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com