How do I get .NET's Path.Combine to convert forward slashes to backslashes?
I'm using Path.Combine like so:
Path.Combine("test1/test2", "test3\\test4");
The output I get is:
test1/test2\test3\test4
Notice how the forward slash doesn't get converted to a backslash. I know I can do string.Replace to change it, but is there a better way of doing this?
Solution 1:
As others have said, Path.Combine doesn't change the separator. However if you convert it to a full path:
Path.GetFullPath(Path.Combine("test1/test2", "test3\\test4"))
the resulting fully qualified path will use the standard directory separator (backslash for Windows).
Note that this works on Windows because both \ and / are legal path separators:
Path.DirectorySeparatorChar = \
Path.AltDirectorySeparatorChar = /
If you run on, say, .NET Core 2.0 on Linux, only the forward slash is a legal path separator:
Path.DirectorySeparatorChar = /
Path.AltDirectorySeparatorChar = /
and in this case it won't convert backslash to forward slash, because backslash is not a legal alternate path separator.
Solution 2:
Because your "test1/test2" is already a string literal, Path.Combine will not change the '/' for you to a '\'.
Path.Combine will only concat the 2 string literals with the appropriate path delimiter used by the OS, in this case Windows, which is '\', from there your output
test1/test2\test3\test4
Your best bet would be the string.Replace.