如何在 C# 中解析相对路径中的 '..'

How to resolve '..' in a relative path in C#

假设我有以下字符串形式的相对路径:

"foo/./my/../bar/file.txt"

是否有快速解决点(如“..”和“.”)的方法,以便结果为:

"foo/bar/file.txt"

我不能使用 Uri,因为它不是绝对路径,我也不能使用 Path.GetFullPath,因为这将添加正在执行的应用程序的路径,所以我最终得到:

 "C:\myAppPath\foo\bar\file.txt"

(它也改变了“/”->“\”,但我并不特别介意这个)

只是一个黑客,

string path = @"foo/./my/../bar/file.txt";
string newPath = Path.GetFullPath(path).Replace(Environment.CurrentDirectory, "");

您可以使用 Path.GetFullPath,其中 returns 路径连同 Environment.CurrentDirectory,使用 String.Replace 解析路径中删除当前目录

你最终会得到 newPath = \foo\bar\file.txt

你总是可以做这样的事情。这样做有用吗?

        string test = "foo/./my/../bar/file.txt";

        bool temp = false;
        string result = "";
        foreach (var str in test.Split('/'))
        {
            if (str.Contains(".") & str.Count(f => f=='.') == str.Length)
            {
                if (temp == false)
                    temp = true;
                else
                    temp = false;
            }
            else
            {
                if (!temp)
                {
                    result += str + "/";

                }
            }
        }
        result = result.Substring(0, result.Length - 1);//is there a better way to do this?
        //foo/bar/file.txt