一、问题
在实际开发中遇到了两个小问题,一个是文件流的读写中的长度和结尾判断;另外一个是C++11库std::chrono::duration的数据类型的问题。这两个问题导致了两个结果:
1、流结尾判断不准确,多读一帧导致长度判断恒为正确,文件不加载
2、对标准库的时间库认知不统一,导致单位不同出现错判
这样说可能不好理解,在下面分别进行代码说明。
二、文件问题解决
先看一下文件处理的原始代码:
#include <fstream>
#include <iostream>
int main() {
std::ifstream f(filename);
if (!f.good()) {
return 0;
}
char buf[1024];
static std::streamsize count = 1024;
while (!f.eof()) {
size_t c = f.getline(buf, count).gcount();//可正常比较
// size_t c = metaFileStream.gcount();//可正常比较
std::cerr << "----" << f.gcount() << std::endl;
auto dlen = f.gcount();
//下面的判断进入,导致文件错误
if (dlen < 3/*f.gcount()<3*/) {
//问题主要在这里,原始的代码是注释掉的部分,但此处二者结果一致
std::cerr << "dlen is:" << dlen << std::endl;
}