C# Can File.writealBytes()可能会失败而不引发异常吗?
我们正在使用System.File.WriteAllBytes方法在我们的一个解决方案中存储文档 在生产环境中,此方法在磁盘中写入了一些0字节的文件。但是,在将文件写入磁盘之前,我们正在记录要写入的文件的大小,这些文件超过0字节。这只发生在一些文件上 我们因此丢失了一些数据 在写入0字节文件而不引发异常后,File.writealBytes是否有可能失败C# Can File.writealBytes()可能会失败而不引发异常吗?,c#,asp.net,.net,C#,Asp.net,.net,我们正在使用System.File.WriteAllBytes方法在我们的一个解决方案中存储文档 在生产环境中,此方法在磁盘中写入了一些0字节的文件。但是,在将文件写入磁盘之前,我们正在记录要写入的文件的大小,这些文件超过0字节。这只发生在一些文件上 我们因此丢失了一些数据 在写入0字节文件而不引发异常后,File.writealBytes是否有可能失败 有人能解释一下原因吗?如果失败,该方法应该抛出异常 但是,请考虑下面的案例 File.WriteAllText(@"d:\temp\test.
有人能解释一下原因吗?如果失败,该方法应该抛出异常
但是,请考虑下面的案例
File.WriteAllText(@"d:\temp\test.txt", "Content");
File.WriteAllBytes(@"d:\temp\test.txt", new byte[0]);
在上面的场景中,第二条语句将0字节写入该文件,并将*文件存储起来,这样磁盘上将有一个0字节的文件。请注意,这不是问题,而是预期的行为,因此请确保用于写入的字节[]不是空的
*aka根据覆盖,这并不意味着覆盖前n个字节,而是覆盖整个文件
其他选项可能是硬件故障。上述语句导致3次磁盘操作,可通过以下方式进行监控:
:创建一个0字节的文件,从而删除现有文件
:将内容写入磁盘
如果在步骤1之后但在步骤2之前发生断电,则文件可能为空。从.NET的角度来看,该操作可能已成功,但从操作系统的角度来看,文件内容仅在写缓存中。老实说,我们最好能用代码示例进行解释。它应该给出一个例外。我认为你的应用程序中有一个bug。字节从哪里来?写入前如何测量?请共享正在进行写入和/或估计字节数的代码,以便我们可以帮助检查EventViewer,以防当时出现磁盘错误。灾难性故障断电可能会使文件处于比操作系统承诺的更旧的状态,但希望你也能看到这种失败的其他迹象