[英]C# get absolute path from `~` on Unix-like systems
我正在 Mac OS 上构建一个 C# 应用程序。 它接收任何路径作为输入,并且必须通过该路径保存文件。 我面临的问题是相对于用户目录的路径,指定为~
。
我正在使用以下代码using var s = File.Create(path);
并且path
参数很少有可能是:
filename.txt
或../filename.txt
- 它可以工作并相对于当前工作目录创建此文件。/Users/username/Desktop/filename.txt
- 也可以按预期工作~/Desktop/filename.txt
- 不起作用。 在这种情况下, File.Create
尝试像案例 1 一样组合绝对路径。它采用current working dir
并简单地添加我的路径,例如/Users/username/project/~/Desktop/filename.txt
。 哪个不存在。 我尝试使用Path.GetFullPath("~/Desktop/filename.txt")
从~/Desktop
获取绝对路径。 结果是相同的/Users/username/project/~/Desktop/filename.txt
。 与Path.GetRelativePath("/", "~/Desktop/filename.txt");
相同
Path.GetRelativePath("./", "~/Desktop/filename.txt");
返回未更改的结果。
然后尝试Path.GetPathRoot("~/Desktop/filename.txt")
。 它只给出一个空字符串。
所以问题是,在 Unix 上的 C# 中,如何像主机一样将相对路径像这样~/Desktop
转换为像这样的绝对路径/Users/username/Desktop
?
您必须确定路径是否以~/
开头,如果是,则将其替换为主目录的路径。 这是一种可以做到这一点的方法:
public static string GetPath(string path) =>
(path.Length >= 2 && path.StartsWith("~/"))
? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), path.Substring(2))
: path;
像这样使用它: GetPath("~/Desktop/filename.txt")
。 这将返回/Users/username/Desktop/filename.txt
(前提是您的主目录是/Users/username
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.