我正在尝试使用Path.Combine
将Windows路径与相对路径连接。
但是,Path.Combine(@"C:\blah",@"..\bling")
返回C:\blah\..\bling
而不是C:\bling\
。
有没有人知道如何在不编写自己的相对路径解析器的情况下完成这一任务(这应该不会太难)?
我正在尝试使用Path.Combine
将Windows路径与相对路径连接。
但是,Path.Combine(@"C:\blah",@"..\bling")
返回C:\blah\..\bling
而不是C:\bling\
。
有没有人知道如何在不编写自己的相对路径解析器的情况下完成这一任务(这应该不会太难)?
8条答案
按热度按时间iecba09b1#
有效:
(result:absolutePath=“C:\bling.txt”)
什么行不通
(result:absolutePath=“C:/blah/bling.txt”)
fwzugrvs2#
在组合路径http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx上调用Path.GetFullPath
(我同意Path.合并应该自己做这件事)
2cmtqfgy3#
ibrsph3r4#
对于Windows通用应用程序
Path.GetFullPath()
不可用,您可以使用System.Uri
类代替:ppcbkaq55#
Path.GetFullPath()
不适用于相对路径。以下是适用于相对路径和绝对路径的解决方案。它适用于Linux和Windows,并且在文本的开头保持
..
的预期值(在静止时,它们将被规范化)。该解决方案仍然依赖于Path.GetFullPath
来进行修复,并提供了一个小的解决方案。这是一个扩展方法,所以像
text.Canonicalize()
一样使用它bfhwhh0e6#
这将给予你你所需要的(路径并不一定存在,这工作)
dxxyhpgq7#
小心反斜杠,不要忘记它们(不要使用两次:)
0vvn1miw8#
要处理任何绝对、相对或URI基本路径,似乎没有一个现成的解决方案可以满足所有需求......所以,我写了一个:
请随意提高性能或应用任何适用于我的答案的快捷方式(我通常不使用C#;我通常写C++。