2

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(およびifstream::tellg)からの戻り値の型は achar_traits<char>::pos_typeです。最終結果を にする必要が本当にない限りint、おそらくpos_type全体で使用することをお勧めします。intおそらくまだ中間値を s に格納したいので、最終結果が必要な場合pos_typeは、減算を行い、結果を にキャストし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 に答える