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();
}
数据是一个字符串(这不是问题,因为当我覆盖文件时它可以工作)
您缺少一个构造函数,该构造函数使用布尔值来帮助创建文件:
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();
}
}
就我个人而言,我真的不会让事情变得更复杂。另外,不要关闭StreamWriter
,using
语句会在它达到目的后处理它。
在我以非管理员身份运行程序的情况下,文件将写入具有管理员权限创建的文件夹中(甚至在ProgramFiles或任何非管理员位置中)。该文件从未创建,您必须手动启用Managed Debugging Assistants
异常中断才能查看任何错误。
解决方案是删除文件夹,然后用我的非管理员帐户重新创建它。还要注意,StreamWriter不创建目录树,只创建文件。
您是否尝试过不使用File.Create()?像这样:
using (StreamWriter stream = new StreamWriter(filePath)) {
stream.Write(data);
stream.Close();
}