有一个实时的json数据(1k字符以内), 会不断刷新. 要保存最后一次刷新的数据到文件里.
刷新频率, 不快也不慢吧, 0.1s一次.
觉得重复打开关闭文件会浪费资源(系统不忙的时候看速度其实也很快),所以不想每次刷新都打开关闭文件.
bool WriteLatestJsonToFile(const Json::Value &jsonValue, const std::string& strFileName)
{
static std::ofstream ofs(strFileName);
if (! ofs.is_open()) {
return false;
}
ofs.seekp(0, std::ios_base::beg);
ofs << jsonValue.toStyledString();
ofs.flush();
return true;
}
发现会导致文件内容有一些错误, json 的格式有时候会坏掉, 文件内容最后有时候会多出一个或者几个右花括号.
然后怀疑每次json内容长度会有区别, 是不是后面写的内容没有原来的长,尾巴就留下了, 网上胡乱搜,想着是不是可以把文件流的内容清空,再写
bool WriteLatestJsonToFile(const Json::Value &jsonValue, const std::string& strFileName)
{
static std::ofstream ofs(strFileName);
static char buff[1024] = {0};
static bool first_call = true;
if (! ofs.is_open()) {
return false;
}
if (first_call) {
first_call = false;
ofs.rdbuf()->pubsetbuf(buff, 1024);
}
memset(buff, 0, 1024);
ofs.seekp(0, std::ios_base::beg);
ofs << jsonValue.toStyledString();
ofs.flush();
return true;
}
还是一样的毛病...
这个需求应该怎么做的?
--
FROM 113.98.204.*