从路径中删除`..`和相关文件夹的最快方法?

jco*_*and 1 .net c# t-sql

这个问题

给出如此的路径:

G:\path\foo\..\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)

我们可以立即在脑海中解析,并且操作系统将解析为:

G:\path\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)

以编程方式执行此操作的最快方法是什么?换句话说,库函数是否已经存在,它将为我干净利落地做到这一点,所以我不会自己搞砸它.

我的第一个答案

// 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
Run Code Online (Sandbox Code Playgroud)

但请注意,这个答案不包括案例(意外,但潜在)

G:\path\foo\..\..\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)

这当然是

G:\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)

TSQL函数也可以运行!!!!!


这个问题不重要,但我想分享;)

我将它从返回值(关闭webservice调用)传递到sproc(用于XML碎化),并希望消除foo\..\因为我传入的值被用作防止以后重复处理的密钥.如果我插入G:\path\foo\..\bar\baz.txt并插入另一个脚本G:\path\bar\baz.txt文件将被处理两次.

And*_*mar 5

尝试

System.IO.Path.GetFullPath(@"G:\path\foo\..\..\bar\baz.txt");
Run Code Online (Sandbox Code Playgroud)