StreamWriter不会写入不存在的文件

时间:2012-01-07 22:56:12

标签: c# file-io xna filestream xna-4.0

我正在为我的游戏制作关卡编辑器,其中大部分都在工作,除了...... 当我尝试保存我的文件(XML)时,文件没有被创建,并且在输出框中我得到:

A first chance exception of type 'System.NullReferenceException'

有趣的是,只有当文件不存在时才会发生,但如果我覆盖另一个文件,它就能正常工作。

这是我正在使用的代码:

using (StreamWriter stream = new StreamWriter(filePath))
{
    stream.Write(data);
    stream.Close();
}

数据是一个字符串(这不是问题,因为它在我覆盖文件时有效)

4 个答案:

答案 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();
        }
}

我真的不会比这更复杂。另外,请不要关闭StreamWriterusing语句在达到目的后处理它。

答案 2 :(得分:1)

在我的情况下,我以非管理员身份运行程序,该文件将写入使用管理员权限创建的文件夹内(甚至在ProgramFiles或任何非管理员位置内)。永远不会创建该文件,您必须手动启用Managed Debugging Assistants异常中断才能看到任何错误。

解决方案是删除该文件夹并使用我的非管理员帐户再次创建它。另请注意,StreamWriter plunker here创建目录树,只创建文件。

答案 3 :(得分:0)

您是否尝试过不使用File.Create()?像这样:

using (StreamWriter stream = new StreamWriter(filePath)) {
    stream.Write(data);
    stream.Close();
}