考虑以下代码,
auto fin = ifstream("address", ios::binary);
if(fin.is_open())
fin.close()
for(auto i = 0; i < N; ++i){
fin.open()
// ....
// read (next) b bytes...
// ....
fin.close()
// Some delay
}
上面的代码无法在我知道的C ++中实现,但我想知道是否可以这样做?
以下是我的要求:
答案 0 :(得分:1)
需要
实际上,只要流保持文件打开,文件就不能被另一个进程删除。
我想你已经问过自己这些问题了,但是对于这些问题我不得不建议你去考虑一下:
解决方案
不幸的是,您无法通过标准流实现所需的行为。您可以通过跟踪文件名和位置(以及更常见的状态)来模拟它:
auto mypos = ifs.tellg(); // saves position.
// Should flag be saved as well ? and what about gcount ?
ifs.close();
...
if (! ifs.is_open()) {
ifs.open(myfilename, myflags); // open again !
if (! ifs) {
// ouch ! file disapeared ==> process error
}
ifs.seekg(mypos); // restore position
if (! ifs) {
// ouch ! position no longer reachable ==> process error
}
}
当然,你永远不想重复这段代码。突然有很多全局变量来跟踪流的状态并不是那么好。但是你可以很容易地将它封装在一个包装类中,该类将使用现有的标准操作来保存和恢复流的状态。