保存的文件包含(后退)斜杠

时间:2013-12-20 16:47:55

标签: c# linux mono filenames streamwriter

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

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是否真的做了同样的事情。

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

3 个答案:

答案 0 :(得分:3)

使用Path.DirectorySeparatorChar代替硬编码\。这将在适当的平台上扩展为正确的斜杠。

答案 1 :(得分:2)

根本不要使用反斜杠,而是使用正斜杠。适用于Unix以及所有版本的DOS和Windows - 甚至可以回到DOS 2.0

ADDED

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

增加了贪婪的咆哮

虽然Path.Combine经常有用,但是当我在文本字符串中直接使用路径字符串时,我主要是为了方便而硬编码斜杠,因为代码更容易阅读(1个字符对多个)并且它总是有效。我认为理论上,.Net可以移植到不接受斜杠作为路径分离器的东西,但是破损的数量会非常严重,我希望该平台上的.Net框架能够在内部转换路径分隔符。 / p>

答案 2 :(得分:2)

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

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

没有斜杠或反斜杠

SIDE注意:从{4.0}开始,可以使用Path.Combine方法接受3个字符串参数组合在当前操作系统的有效路径中