File.WriteAllBytes()是否可以在不引发异常的情况下失败?

时间:2018-07-24 08:01:14

标签: c# asp.net .net

我们正在使用System.File.WriteAllBytes()方法将文档存储在我们的一种解决方案中。

在生产环境中,此方法已在磁盘中写入一些个文件,该文件的大小为 0个字节。但是,在将它们写入磁盘之前,我们正在记录正在写入的文件的大小,这些文件的大小超过0个字节。这仅在某些文件中发生。

因此,我们丢失了一些数据。

在写入0字节文件而没有引发异常之后,File.WriteAllBytes()是否有可能失败?

任何人都可以解释其原因吗?

1 个答案:

答案 0 :(得分:1)

如果失败,该方法应引发异常。

但是,请考虑以下情况

File.WriteAllText(@"d:\temp\test.txt", "Content");
File.WriteAllBytes(@"d:\temp\test.txt", new byte[0]);

在上述情况下,第二条语句将0字节写入文件,然后对*)文件进行写实,因此磁盘上将存在0字节的文件。请注意,这不是问题,而是预期的行为,因此请确保用于写操作的byte[]不为空。

*)也根据MSDN“覆盖”,这并不意味着覆盖前 n 个字节,而是覆盖整个文件

其他选项可能是硬件故障。上面的语句导致3个磁盘操作,可以使用ProcessMonitor进行监视:

  1. CreateFile:创建一个0字节的文件,从而删除现有文件
  2. WriteFile:将内容写入磁盘
  3. CloseFile

如果在步骤1之后但在步骤2之前停电,则文件可能为空。从.NET的角度来看,该操作可能已经成功,但是从OS的角度来看,文件内容仅位于写缓存中。