繁体   English   中英

C# 在类 Unix 系统上从 `~` 获取绝对路径

[英]C# get absolute path from `~` on Unix-like systems

我正在 Mac OS 上构建一个 C# 应用程序。 它接收任何路径作为输入,并且必须通过该路径保存文件。 我面临的问题是相对于用户目录的路径,指定为~

我正在使用以下代码using var s = File.Create(path); 并且path参数很少有可能是:

  1. 提供了相对路径,例如filename.txt../filename.txt - 它可以工作并相对于当前工作目录创建此文件。
  2. 提供的绝对路径,例如/Users/username/Desktop/filename.txt - 也可以按预期工作
  3. 但提供相对于用户目录的路径,例如~/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM