我正在为我的游戏制作关卡编辑器,其中大部分都在工作,除了...... 当我尝试保存我的文件(XML)时,文件没有被创建,并且在输出框中我得到:
A first chance exception of type 'System.NullReferenceException'
有趣的是,只有当文件不存在时才会发生,但如果我覆盖另一个文件,它就能正常工作。
这是我正在使用的代码:
using (StreamWriter stream = new StreamWriter(filePath))
{
stream.Write(data);
stream.Close();
}
数据是一个字符串(这不是问题,因为它在我覆盖文件时有效)
答案 0 :(得分:11)
你是missing a constructor,它带有一个可以帮助创建文件的布尔值:
using (StreamWriter stream = new StreamWriter(filePath, false)) {
stream.Write(data);
stream.Close();
}
然而,逻辑实际上比这复杂得多:
public StreamWriter( string path, bool append )
确定是否将数据附加到文件。如果是文件 exists和append为false,文件被覆盖。如果是文件 exists和append为true,数据将附加到文件中。 否则,将创建一个新文件。
答案 1 :(得分:3)
为什么不以简单的方式绕过它,并在写入之前检查文件是否存在:
public void Foo(string path, string data)
{
if (!File.Exists(path))
File.Create(path);
using (var sw = new StreamWriter(path, false))
{
// Work your magic.
sw.Write();
}
}
我真的不会比这更复杂。另外,请不要关闭StreamWriter
,using
语句在达到目的后处理它。
答案 2 :(得分:1)
在我的情况下,我以非管理员身份运行程序,该文件将写入使用管理员权限创建的文件夹内(甚至在ProgramFiles或任何非管理员位置内)。永远不会创建该文件,您必须手动启用Managed Debugging Assistants
异常中断才能看到任何错误。
解决方案是删除该文件夹并使用我的非管理员帐户再次创建它。另请注意,StreamWriter plunker here创建目录树,只创建文件。
答案 3 :(得分:0)
您是否尝试过不使用File.Create()?像这样:
using (StreamWriter stream = new StreamWriter(filePath)) {
stream.Write(data);
stream.Close();
}