我已经使用Linux多年了,由于这种习惯,我添加了 / (斜杠)而不是 \ (反斜杠)来获取我的C#代码。
private const string X86DllPath = "x86/ShaferFilechck.dll"; // should use x86\\ShaferFilechck.dll
private const string X64DllPath = "x64/ShaferFilechck.dll";
[DllImport(X64DllPath, EntryPoint = "NalpLibOpen", CallingConvention = CallingConvention.Cdecl)]
private static extern int NalpLibOpen_64(byte[] xmlParms);
代码有效,但是我想知道c#在Windows上编译并运行时是否将斜杠转换为反斜杠。有一些官方文件说明这一点吗?
在某些情况下,可能在路径中使用/导致某些意外行为。
更新:
我知道最终的解决方案是使用它,但是我想知道为什么斜杠仍然是'ok':
Path.Combine("x86", "ShaferFilechck.dll"); // x86\ShaferFilechck.dll
答案 0 :(得分:1)
您可能可以在Path.GetFullPath()
命名空间下像下面一样使用System.IO
private readonly string X86DllPath = Path.GetFullPath("x86/ShaferFilechck.dll");
答案 1 :(得分:0)
以我的经验,Windows可以使用正斜杠和反斜杠作为路径分隔符。即使混合它们也可以。 C#和.NET不对文件名中的任何正斜杠进行任何处理。 Windows在文件系统层接受它们作为反斜杠的备用字符。在Linux和其他OS上运行C#代码并不能说相同。
为了平台一致性,建议不要使用路径分隔符。您的程序应使用 Path.DirectorySeparatorChar 来确定在不同平台上部署应用程序时要使用的正确字符。
有关更多信息,请参见How can I create files on Windows with embedded slashes, using Python?。
答案 2 :(得分:0)
使用单个正斜杠表示网络路径应该没有问题,而且我从未见过将它们转换为反斜杠。
由于您不熟悉C#,因此使用单个反斜杠字符可能会引起问题,因为它们可能被视为转义字符,例如“ \ n”,这是换行符。如果您不打算将反斜杠用作转义符,则有两种选择来强制系统按如下方式使用它们:
1)使用双斜杠分隔网络路径节点
2)在包含反斜杠的字符串之前使用@。这是更清洁的方法。