StreamWriter 系统突然关闭时在文件末尾写入 NUL 字符

Ven*_*nki 6 c# shutdown streamwriter

我正在编写一些测试应用程序,以使用StreamWriter. 执行该WriteLine方法时,系统突然关闭。重新启动机器后,我发现文件末尾有很多 NUL 字符。

我查了很多网站,包括MSDN,都没有找到解决这个问题的方法。

有人可以帮我解决这个问题吗?

如果我们执行以下步骤,可以轻松重现这一点:

  1. 创建 WindowsApplication 并在其上放置一个按钮控件。

  2. 在按钮单击事件处理程序中编写以下代码:

    私人无效button1_Click(对象发送者,EventArgs e)

     {
         string str = "Welcome to the C Sharp programming world with a test application using IO operations.";
         StreamWriter sw = new StreamWriter(fileName, true, Encoding.Unicode, str.Length);
         sw.WriteLine(str);
         sw.Close();        
     } 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行应用程序并连续单击按钮(直到机器关闭才停止),然后按 PC 的关机按钮。

  4. 重新启动电脑并检查文件。它包含以下文本:

欢迎来到 C Sharp 编程世界,这里有一个使用 IO 操作的测试应用程序。

欢迎来到 C Sharp 编程世界,这里有一个使用 IO 操作的测试应用程序。

欢迎来到 C Sharp 编程世界,这里有一个使用 IO 操作的测试应用程序。

欢迎来到 C Sharp 编程世界,这里有一个使用 IO 操作的测试应用程序。

欢迎来到 C Sharp 编程世界,这里有一个使用 IO 操作的测试应用程序。

欢迎来到 C Sharp 编程世界,这里有一个使用 IO 操作的测试应用程序。

努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努努

NUL字符会出现在Notepaad++中,而我们在普通记事本中看不到这些字符。

sha*_*oth 3

那个会发生。当您首先附加文件时,其大小会在目录中进行更正(这在 NTFS 中是事务性的),然后写入实际的新数据。如果您关闭系统,您很可能会得到一个附加有大量空字节的文件,因为与元数据(文件大小)写入不同,数据写入不是事务性的。

这个问题没有绝对的解决方案。