如何在 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
假设我有以下字符串形式的相对路径:
"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