【发布时间】:2012-11-21 16:34:57
【问题描述】:
在一些使用 std::ofstream 执行大量文件 i/o 的代码中,我正在缓存流以提高效率。但是,有时我需要更改文件的打开模式(例如追加与截断)。下面是一些类似的模拟代码:
class Logger {
public:
void write(const std::string& str, std::ios_base::openmode mode) {
if (!myStream.is_open) myStream.open(path.c_str(), mode);
/* Want: if (myStream.mode != mode) {
myStream.close();
myStream.open(path.c_str(), mode);
}
*/
myStream << str;
}
private:
std::ofstream myStream;
std::string path = "/foo/bar/baz";
}
有谁知道:
- 有办法改变
ofstream的打开模式吗? - 如果没有,有没有办法找出
ofstream的当前openmode是什么,以便我可以仅在必要时关闭并重新打开它?
【问题讨论】:
-
您可能想了解these 状态函数,这些函数允许您设置或返回标志的状态.....
-
我只是好奇你为什么要改变它?什么时候适用这样的条件?
-
@noleptr 我看过这些,但它们不允许您更改文件的打开模式。您只能获取/设置
goodbit、badbit、failbit、eofbit。 @BartekBanachewicz 我正在重做部分库的实现。我也不确定在什么情况下你实际上需要这个,但我需要保持与以前相同的行为。以前,这是通过特定于平台的系统调用来完成的,这些系统调用可以让您查询文件的状态。 -
您可能必须根据要设置的标志手动设置流指针
-
@user814628 你能详细说明一下吗?
标签: c++ iostream ofstream c++03