读书人

ofstream写大文件出错,该如何解决

发布时间: 2012-05-01 12:48:58 作者: rapoo

ofstream写大文件出错
我的程序在运行过程中会同时向磁盘写两个体积很大的二进制文件。文件A大致是240G,文件B大致是480G。两个文件都是用ofstream对象来维护的。写操作是通过ofstream的write成员函数实现的。

现在的问题是:每次写文件写到64%左右就会出错,write函数的返回值显示写操作没有成功。第一回是在文件A出错,第二回则是在文件B出错。

刚好这几天单位这边的电路在整改。程序两次出错,都正好是电工对配电箱进行操作、对中央空调和好几个房间的电路进行合闸开闸的时候。所以不知道有没有可能是电压不稳而导致磁盘写操作失败。但是我的房间并没有停电,也就是说电脑并没有停机,所以感觉很奇怪。

目前已经排除了单个文件大小限制的原因,因为我试过用ofstream的write成员函数向磁盘写700G的二进制文件,一点问题也没有。

不知有没有办法得知具体的错误原因?我觉得ofstream的几个标志——badbit、eofbit和failbit都给不出很有用的信息。目前正尝试用C标准库的errno和strerror获得出错原因。但是我看了一下errno的说明,要是errno是EIO(I/O error)的话,这信息也没有太大用处。

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

[解决办法]
既然你说写单个文件没问题,那要是把两个文件分开写呢,我是说不要同时写。另外,你是什么系统呢,我觉得 ostream 可能给不出具体的原因了,只能靠系统自己的函数了。
[解决办法]

探讨

引用:

既然你说写单个文件没问题,那要是把两个文件分开写呢,我是说不要同时写。另外,你是什么系统呢,我觉得 ostream 可能给不出具体的原因了,只能靠系统自己的函数了。


现在正在跑第三遍,祈祷这几天电工不会有什么动作。如果又出错了,就写一个小程序,试一下你说的方法,先写一个文件再写另一个文件。不过我觉得这和我现在出错的实际程序好像没啥区别,因为我的程序是单线……

[解决办法]
探讨

郁闷大了。结果这回在55%就出错了。errno是EINVAL:Invalid argument。

读书人网 >C++

热点推荐