[英]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();
}
}
我真的不會比這更復雜。 另外,不要關閉StreamWriter
, using
語句在它達到目的后處理它。
在我的情況下,我以非管理員身份運行該程序,該文件將被寫入使用管理員權限創建的文件夾內(甚至在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.