给出这样的路径:
G:\path\foo\..\bar\baz.txt
我们可以在脑海中立即解析,并且操作系统将解析为:
G:\path\bar\baz.txt
以编程方式执行此操作的最快方法是什么? 换句话说,是否已经存在一个库函数,它会干净利落地为我做这个,所以我不会自己搞这个。
// in pseudocode
string[] s = input.split('\')
string output
for ( int i = s.length ; i > 0 ; i-- ) {
if ( s[i] == ".." ) i--;
else output = s[i] + "\" + output
}
return output
但请注意,这个答案并未涵盖
的情况(意外,但潜在)G:\path\foo\..\..\bar\baz.txt
当然是
G:\bar\baz.txt
TSQL函数也可以运行!!!!!
我将它从返回值(关闭webservice调用)传递到sproc(用于XML碎化),并希望消除foo\..\
,因为我传入的值被用作防止重复的键稍后处理。如果我插入G:\path\foo\..\bar\baz.txt
而另一个脚本插入G:\path\bar\baz.txt
,则文件将被处理两次。
答案 0 :(得分:5)
尝试
System.IO.Path.GetFullPath(@"G:\path\foo\..\..\bar\baz.txt");
答案 1 :(得分:3)
public static string System.IO.Path.GetFullPath(string path)
是你需要的。