StreamWriter没有';t写入的文件;不存在

本文关键字:文件 不存在 没有 StreamWriter | 更新日期: 2023-09-27 18:19:39

我正在为我的游戏制作一个关卡编辑器,除了。。。当我试图保存我的文件(XML)时,文件没有被创建,在输出框中我得到:

A first chance exception of type 'System.NullReferenceException'

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

这是我正在使用的代码:

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

数据是一个字符串(这不是问题,因为当我覆盖文件时它可以工作)

StreamWriter没有';t写入的文件;不存在

您缺少一个构造函数,该构造函数使用布尔值来帮助创建文件:

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

然而,逻辑实际上比这复杂得多:

public StreamWriter( string path, bool append )

确定是否将数据附加到文件中。如果文件如果存在并且append为false,则文件将被覆盖。如果文件如果存在并且append为true,则将数据附加到文件中。否则,将创建一个新文件。

为什么不简单地绕过它,在写入之前检查文件是否存在:

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语句会在它达到目的后处理它。

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

解决方案是删除文件夹,然后用我的非管理员帐户重新创建它。还要注意,StreamWriter不创建目录树,只创建文件。

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

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