【问题标题】:Saved files contain (back)slashes保存的文件包含(反)斜杠
【发布时间】:2013-12-20 16:47:54
【问题描述】:

我正在尝试将一些数据保存到文件中,但文件保存到了不正确的目录。

using (StreamWriter sw = new StreamWriter(dir + "\\temp" + x + ".txt"))
    sw.Write(data);

在 Windows 上,这可以正常工作。但是,当我在 Linux(Ubuntu,但我认为这并不重要)上运行它时,在 Mono 下,我的文件会以名称中的反斜杠保存。

我尝试过使用Path.Combine(dir, "temp" + x + ".txt"); 和正斜杠。没用。

有人有什么建议吗?

编辑:原来我对上述解决方案的“尝试”不是很好。我已经习惯了每次运行应用程序时都重新编译 Visual Studio,以至于忘记检查 MonoDevelop 是否真的这样做了。

在进行更改和重建后,我发现答案中提供的所有三个解决方案都有效。

【问题讨论】:

    标签: c# linux mono filenames streamwriter


    【解决方案1】:

    使用Path.DirectorySeparatorChar 而不是硬编码\。这将在适当的平台上扩展到正确的斜线。

    【讨论】:

      【解决方案2】:

      NET Framework 为您提供了许多处理路径的工具。从 Path 类开始

      using (StreamWriter sw = new StreamWriter(Path.Combine(dir, "temp", x + ".txt"))
          sw.Write(data);
      

      没有斜线或反斜线

      旁注:接受 3 个字符串参数以组合到当前操作系统的有效路径中的 Path.Combine 方法从 NET.4.0 开始提供

      【讨论】:

        【解决方案3】:

        根本不要使用反斜杠,而是使用正斜杠。在 Unix 和所有版本的 DOS 和 Windows 上工作——是的,甚至回到 DOS 2.0

        添加

        在创建文件之前先创建所有中间目录。

        增加了学究式的咆哮

        虽然 Path.Combine 经常有用,但当我直接在文本字符串中使用路径字符串时,为了方便起见,我主要使用硬编码斜杠,因为代码更易于阅读(1 个字符与多个字符)并且它始终有效。我想从理论上讲,.Net 可以移植到不接受斜杠作为路径分隔符的东西,但是破损量会非常严重,我希望该平台上的 .Net 框架会在内部翻译路径分隔符。

        【讨论】:

        • 新增先创建中间目录
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        • 2019-08-06
        相关资源
        最近更新 更多