2

假设我想获得两个 tellp() 输出之间的差异(以 int 为单位)。

如果写入大文件,tellp() 输出可能会很大,因此将其存储在 long long 中是不安全的。有没有一种安全的方法来执行这样的操作:

ofstream fout;
fout.open("test.txt",ios::out | ios::app);
int start = fout.tellp();
fout<<"blah blah "<<100<<","<<3.14;
int end = fout.tellp();
int difference = end-start;

在这里,我知道 end 和 start 之间的差异绝对可以放在 int 中。但是结束和开始本身可能非常庞大。

4

1 回答 1

2

ofstream::tellp(and )的返回类型ifstream::tellg是 a char_traits<char>::pos_type。除非您真的需要最终结果是int,否则您可能希望pos_type始终使用。如果您确实需要最终结果,int您可能仍希望将中间值存储在pos_types 中,然后进行减法并将结果转换为int.

typedef std::char_traits<char>::pos_type pos_type;

ofstream fout;
fout.open("test.txt",ios::out | ios::app);
pos_type start = fout.tellp();
fout<<"blah blah "<<100<<","<<3.14;
pos_type end = fout.tellp();
int difference = int(end-start);
// or: pos_type difference = end-start;
于 2013-05-29T23:15:54.273 回答