我们正在使用System.File.WriteAllBytes()
方法将文档存储在我们的一种解决方案中。
在生产环境中,此方法已在磁盘中写入一些个文件,该文件的大小为 0个字节。但是,在将它们写入磁盘之前,我们正在记录正在写入的文件的大小,这些文件的大小超过0个字节。这仅在某些文件中发生。
因此,我们丢失了一些数据。
在写入0字节文件而没有引发异常之后,File.WriteAllBytes()
是否有可能失败?
任何人都可以解释其原因吗?
答案 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之后但在步骤2之前停电,则文件可能为空。从.NET的角度来看,该操作可能已经成功,但是从OS的角度来看,文件内容仅位于写缓存中。