簡體   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