我想确保路径始终以\
结尾,并尝试使用Path.Combine作为下面的代码。
我希望System.IO.Path.Combine("xxx", System.IO.Path.DirectorySeparatorChar.ToString())
返回xxx\
,但只返回\
System.IO.Path.Combine("xxx", "\\", "zz")
也是如此,我期待xxx\zz
,但事实证明是\zz
以下是我所做的测试。
我不确定这是否是一个理想的行为,或者它是一个错误。
答案 0 :(得分:4)
这是Path.Combine
的定义行为。如果第二个(或任何后续)路径是“rooted”,即以“\”或“c:”之类的路径分隔符开头,则忽略任何先前的参数。来自文档:
如果path2不包含根(例如,如果path2未启动) 使用分隔符或驱动器规范),结果是a 这两条路径的连接,带有插入分隔符 字符。如果path2包含root,则返回path2。
使用System.IO.Path.DirectorySeparatorChar
时,你不应该使用像Path.Combine
这样的东西,恕我直言,它的全部意义在于让路径操作更容易,而不是更难。
答案 1 :(得分:1)
Path.Combine
结合了路径。如果第二个参数是相对路径,则组合路径;如果它是绝对路径,则仅返回第二个参数(因为组合绝对路径没有意义)。 \
是指向根目录的绝对路径。
可以更轻松地实现您的目标
myPath = myPath.TrimEnd('\') + "\";
另一方面,为什么您需要以\
结束路径? Path.Combine
的重点是,您 需要以\
结尾的路径。请注意以下示例:
myPath = Path.Combine(@"C:\xxx", "zz"); // yields C:\xxx\zz
myPath = Path.Combine(@"C:\xxx\", "zz"); // also yields C:\xxx\zz
答案 2 :(得分:0)
来自Combine
的文档:
如果后续路径之一是绝对路径,则组合操作将从该绝对路径开始重置,丢弃所有先前的组合路径。
由于\
是绝对路径,因此前面的所有内容都将被丢弃。
答案 3 :(得分:0)
这是记录在案的行为。来自Path.Combine(string path1, string path2)的文档:
如果path2包含绝对路径,则此方法返回path2。