如何让.NET的Path.Combine将正斜杠转换为反斜杠?

Dan*_* T. 48 .net c#

我正在使用Path.Combine:

Path.Combine("test1/test2", "test3\\test4");
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

test1/test2\test3\test4
Run Code Online (Sandbox Code Playgroud)

注意正斜杠如何不转换为反斜杠.我知道我可以做string.Replace改变它,但是有更好的方法吗?

Joe*_*Joe 96

正如其他人所说,Path.Combine不会更改分隔符.但是,如果将其转换为完整路径:

Path.GetFullPath(Path.Combine("test1/test2", "test3\\test4"))
Run Code Online (Sandbox Code Playgroud)

生成的完全限定路径将使用标准目录分隔符(Windows的反斜杠).

请注意,这适用于Windows,因为\和/都是合法的路径分隔符:

Path.DirectorySeparatorChar = \
Path.AltDirectorySeparatorChar = /
Run Code Online (Sandbox Code Playgroud)

如果你在Linux上运行.NET Core 2.0,只有正斜杠是合法的路径分隔符:

Path.DirectorySeparatorChar = /
Path.AltDirectorySeparatorChar = /
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它不会将反斜杠转换为正斜杠,因为反斜杠不是合法的备用路径分隔符.

  • 可行,但要小心,因为 GetFullPath() 将修复相对路径并将其转换为完整路径。如果您需要保留相对路径 GetFullPath() 将不起作用。 (5认同)

Ria*_*aan 23

因为你的"test1/test2"已经是一个字符串文字,所以Path.Combine不会将'/'更改为'\'.

Path.Combine只会使用操作系统使用的相应路径分隔符来连接2个字符串文字,在这种情况下,Windows,即'\',从那里输出

test1/test2\test3\test4
Run Code Online (Sandbox Code Playgroud)

你最好的选择是string.Replace.

  • 谢谢.或者,我发现`Path.GetFullPath()`也将用反斜杠替换斜杠. (34认同)
  • 在组合之后,你可以用`Path.DirectorySeparatorChar`替换所有类型的斜杠. (6认同)

Tim*_*Tim 19

尝试使用该Uri课程.它将为正确的目标机器(/- > \)创建有效的Uris .

  • 这可以工作:`new Uri(@“ c:/ temp \ test /”)。LocalPath` (3认同)
  • 呵呵。这对我来说不起作用,执行 `new Uri("\apath\uploads/filename.png")`。异常:无效 URI:无法确定 URI 的格式。它位于 C# ASP MVC 项目 .NET v4.5.1 中。我可以发誓 Path.Combine() 做到了这一点,但我想不是。 (3认同)