繁体   English   中英

StreamWriter不会写入不存在的文件

[英]StreamWriter doesn't write to a file that doesn't exist

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

A first chance exception of type 'System.NullReferenceException'

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

这是我正在使用的代码:

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

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

错过了一个构造函数 ,它接受一个可以帮助创建文件的布尔值:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM