【发布时间】:2016-10-10 17:58:56
【问题描述】:
考虑以下代码,
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++实现,但我想知道是否可以这样做?
这是我的要求:
- 重新打开文件时,无需再次传递参数(路径和模式)。
- 重新打开流时,它会从流中关闭时的位置继续。
澄清
- 我使用的文件很大,在某个时间点,来自第三方库的其他线程可能会决定(重新)移动它们。开放的流将阻止此类行为。
- 连续读取大文件会降低系统速度。
【问题讨论】:
-
流的工作方式并非如此。如果您希望它打开并定位,为什么要关闭它?
-
@BoPersson 我使用的文件很大,在某个时间点,来自第三方库的其他线程可能会决定删除它们。开放的流将阻止此操作,并且这些线程可能会失败。
-
在这里为并发噩梦做好准备。建议重新考虑。
-
删除了我的答案,因为我不记得足够多的 C++ 来继续回答。您总是可以创建一个接受构造函数参数的函数,并返回一个接受流的新函数,并在旧函数停止的地方创建一个新函数。可能是实现您想要实现的目标的最简单方法。
-
@Carcigenicate 感谢您抽出宝贵的时间来回答。谢谢你。我从你提到的内容中得到了一个想法。
标签: c++ c++11 visual-c++ c++14