【问题标题】:Absolute Path from Relative Path with a different current folder具有不同当前文件夹的相对路径中的绝对路径
【发布时间】:2012-12-10 21:29:25
【问题描述】:

我需要从相对路径中获取绝对路径,但使用不同于执行程序集的文件夹来解析 "."".."Path.GetFullPath 不提供这样的过载。

例如,假设我有以下路径:

..\MyOtherFolder\foo.bar

执行程序集的文件夹是:

c:\users\me\desktop\source\myproj\bin\debug\

但实际上它可以位于任何地方。

我想将“当前”文件夹指定为c:\test,因此".." 解析为"c:\"

有谁知道这是否内置在任何地方的 .NET 框架中?如果没有,我打算制作一个 Utility 方法,但我想我会先检查一下(特别是因为没有静态扩展方法......)。

编辑:

Path.Combine 将不起作用。这个方法本质上所做的就是连接两个字符串。

【问题讨论】:

标签: c# .net path


【解决方案1】:

你试过了吗

Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar"))

这应该可以解决问题。

【讨论】:

    【解决方案2】:
    public string FullPathRelativeTo(string root, string partialPath)
    {
        string oldRoot = Directory.GetCurrentDirectory();
        try {
            Directory.SetCurrentDirectory(root);
            return Path.GetFullPath(partialPath);
        }
        finally {
            Directory.SetCurrentDirectory(oldRoot);
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您目前在c:\test 并且您想获得c:\MyOtherFolder\foo.bar 却不知道您在c:\test 您想这样做;

       Environment.CurrentDirectory = @"..\MyOtherFolder"; //navigation accepts relative path
       string fullPath = Directory.GetCurrentDirectory(); // returns full path
      

      之后,您可能希望将当前目录设置回您之前的位置。

      【讨论】:

      • 虽然更改当前目录并不是很理想(在实用程序方法中,它不是线程安全的并不明显),但这适用于我当前的目的。
      • 这伤害了我的身体... :(
      【解决方案4】:

      你可以的

      new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName
      

      【讨论】:

        【解决方案5】:

        尝试使用Path.Combine(...)方法,它必须帮助你实现你想要的..

        【讨论】:

        • 我的印象是 OP 假设他不知道他在 c:\tests,他可能在任何地方,并且希望在给定相对路径的情况下获得完整路径,因此 Path.Combine 不会工作。
        猜你喜欢
        • 2016-08-03
        • 1970-01-01
        • 2013-12-20
        • 2011-06-15
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多