Bra*_*don 31 c# filesystems io .net-4.0
令我惊讶的是,此代码不会产生预期的结果:
var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";
var combinedPath = Path.Combine(basePath, relativePath);
Run Code Online (Sandbox Code Playgroud)
结果\My\Relative\Folder不是预期的结果\\server\BaseFolder\My\Relative\Folder.
为什么是这样?将相对路径组合在一起的最佳方法是什么?这些路径可能有也可能没有斜线?
编辑:我知道我可以在relativePath上进行字符串操作来检测并删除起始斜杠.是否有一种更安全的方式来做这个(我认为Path.Combine应该是安全的方式)来解释反斜杠和前沿?
Gre*_*reg 20
以斜杠开头的路径被解释为绝对路径而不是相对路径.如果你想保证relativePath将被视为相对的,只需修剪斜线.
var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";
var combinedPath = Path.Combine(basePath, relativePath.TrimStart('/', '\\'));
Run Code Online (Sandbox Code Playgroud)
根据此文档,注释Path.Combine指出最好用于Path.Join()用户可能已输入值的情况。看起来它是随 .NET Core 3.0 引入的
Path.Join(basePath, relativePath);
Run Code Online (Sandbox Code Playgroud)
似乎唯一的区别是这种明确的场景,我们不想将我们组合的任何路径视为潜在的根路径。
与Combine 方法不同,Join 方法不会尝试对返回的路径进行根操作。(也就是说,如果path2或path2或path3是绝对路径,Join方法不会像Combine方法那样丢弃以前的路径。
| 归档时间: |
|
| 查看次数: |
11252 次 |
| 最近记录: |