假设我将以下相对路径作为字符串:
"foo/./my/../bar/file.txt"
是否有快速解决点的方法(如“..”和“。”),以便结果如下:
"foo/bar/file.txt"
我不能使用Uri
,因为它不是绝对路径,我也不能使用Path.GetFullPath
,因为这将添加正在执行的应用程序的路径,以便我最终得到:
"C:\myAppPath\foo\bar\file.txt"
(也改变了“/” - >“\”,但我并不特别介意)
答案 0 :(得分:3)
只是一个黑客,
string path = @"foo/./my/../bar/file.txt";
string newPath = Path.GetFullPath(path).Replace(Environment.CurrentDirectory, "");
您可以使用Path.GetFullPath
和Environment.CurrentDirectory
一起返回路径,使用String.Replace
从已解析路径中删除当前目录。
您最终会得到newPath = \foo\bar\file.txt
答案 1 :(得分:1)
你总是可以这样做。这样做了吗?
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