【问题标题】:Is it ok to use slash for path in c# code在 c# 代码中使用斜杠作为路径是否可以
【发布时间】:2019-02-28 07:48:20
【问题描述】:

我已经使用 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 上编译和运行时是否将斜杠转换为反斜杠。是否有一些官方文件说明这一点或其他内容。

在某些情况下,在路径中使用 / 可能会导致一些意外行为。

更新:

我知道最终的解决方案是使用它,但我想知道为什么斜线仍然“可以”:

Path.Combine("x86", "ShaferFilechck.dll"); // x86\ShaferFilechck.dll

【问题讨论】:

  • 查看this 答案,该答案建议使用Path.DirectorySeparatorChar 以获得更好的可移植性。

标签: c# windows path backslash


【解决方案1】:

根据我的经验,Windows 可以容忍使用正斜杠和反斜杠作为路径分隔符。即使混合它们也有效。 C# 和 .NET 不对文件名中的任何正斜杠进行任何处理。文件系统层的 Windows 接受它们作为反斜杠的替代字符。在 Linux 和其他操作系统上运行 C# 代码就不是这样了。

为了平台一致性,不建议使用路径分隔符。您的程序应使用 Path.DirectorySeparatorChar 来确定在不同平台上部署应用时要使用的正确字符。

请参阅How can I create files on Windows with embedded slashes, using Python? 了解更多信息。

【讨论】:

    【解决方案2】:

    您可能可以在System.IO 命名空间下使用Path.GetFullPath(),如下所示

    private readonly string X86DllPath = Path.GetFullPath("x86/ShaferFilechck.dll");
    

    【讨论】:

    • 嗯不知道它构造了添加了正确反斜杠的完整绝对路径。谢谢,这并没有回答我的问题,但是已经发现了新事物并部分回答了我的问题。
    【解决方案3】:

    使用单个正斜杠表示网络路径应该没有问题,而且我从未见过将它们转换为反斜杠。
    由于您是 C# 新手,因此使用单个反斜杠字符可能会导致问题,因为它们可能会被视为转义字符,例如换行符“\n”。如果您不打算使用反斜杠作为转义,您有两种选择来强制系统使用它们: 1)使用双斜杠分隔网络路径节点 2) 在包含反斜杠的字符串之前使用 @。这是更清洁的方法。

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 2010-12-29
      • 1970-01-01
      • 2020-11-12
      • 2011-08-13
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多