我正在尝试将一些数据保存到文件中,但文件会保存到不正确的目录中。
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是否真的做了同样的事情。
在进行更改和重建后,我发现答案中提供的所有三种解决方案都有效。
答案 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个字符串参数组合在当前操作系统的有效路径中