在运行期间,我的程序会同时创建并将两个大型二进制文件写入磁盘。文件A大约是240GB,文件B大约是480GB。这两个文件由两个ofstream
对象维护,写操作在成员函数write
中循环执行。
现在问题是:每次整个写文件程序达到63~64%时,写文件操作失败。第一次在文件A上失败,第二次在文件B上失败。
在这些天的程序运行期间,我的建筑的电源正好在升级之中。奇怪的是,每次节目失败时,电工正好切断并恢复中央空调和一些办公室的电源。因此,我真的很想知道写文件是否是由不稳定的电源引起的。
我确定故障不是由文件大小限制引起的,因为我尝试使用相同的方法编写单个700GB文件而没有任何问题。
有没有办法找出详细的原因?我觉得badbit
的旗帜(eofbit
,failbit
和ofstream
)没有提供太多信息。现在,我尝试使用errno
和strerror
来获取详细的错误消息。但是,我发现errno
的可能值是EIO
,它会测量" I / O错误",它再次没有提供有用的信息。
以前是否有人遇到过这种情况?
顺便说一下,当文件A和文件B的大小很小时,程序运行时没有错误。
PS:这次程序失败率为55%,而errno值为EINVAL:参数无效。很奇怪。
答案 0 :(得分:1)
确认,原因确实是NTFS的错误:A heavily fragmented file in an NTFS volume may not grow beyond a certain size。这意味着CreateFile和WriteFile也无法从根本上解决问题。
答案 1 :(得分:0)
好的,我已经用Win32 API解决了这个问题:CreateFile和WriteFile。