0

在运行期间,我的程序会同时创建两个大型二进制文件并将其写入磁盘。文件 A 大约 240GB,文件 B 大约 480GB。这两个文件由两个ofstream对象维护,写操作是通过成员函数write循环执行的。

现在的问题是:每次整个写文件过程达到63~64%,写文件操作就会失败。第一次在文件 A 上失败,第二次在文件 B 上失败。

这几天程序运行期间,我楼的电源恰好在升级中。巧合的是,每次程序失败时,电工都恰巧在切断和恢复中央空调和部分办公室的电源。所以,我很想知道写文件失败是不是电源不稳定造成的。

我确定失败不是由文件大小限制引起的,因为我尝试使用相同的方法写入单个 700GB 文件而没有任何问题。

有什么方法可以查出详细原因吗?我觉得标志(badbiteofbitfailbit没有ofstream提供太多信息。现在我正在尝试使用errnostrerror获取详细的错误消息。但是,我看到 is 的可能值errnoEIO它表示“I/O 错误”,它再次没有提供有用的信息。

有没有人遇到过这种情况?

顺便说一句,当文件 A 和文件 B 的大小很小时,程序运行不会出错。

PS:这次程序在 55% 处失败,errno 值为 EINVAL: Invalid argument。很奇怪。

4

2 回答 2

1

已确认,原因确实是 NTFS 的一个错误:NTFS 卷中的碎片严重的文件可能不会增长到超过一定大小。这意味着 CreateFile 和 WriteFile 也不能从根本上解决问题。

于 2012-05-01T15:00:38.987 回答
0

好吧,我已经用 Win32 API 解决了这个问题:CreateFile 和 WriteFile。

于 2012-04-28T12:04:36.350 回答