4

現在、次のようなことを行うコードがあります。

ofstream fout;
fout.open("file.txt");
fout<<"blah blah "<<100<<","<<3.14;
//get ofstream length here
fout<<"write more stuff"<<endl;

上記で指定した段階で書かれたその行の長さを調べる便利な方法はありますか? (実際には、int 100 と float 3.14 は定数ではなく、変更される可能性があります)。私がやりたいことをする良い方法はありますか?

編集:長さによって、fseekを使用して使用できるものを意味します。

fseek(pFile, -linelength, SEEK_END);
4

4 に答える 4

6

あなたがしたいtellp。これは、出力ストリーム (ostream、ofstream、stringstream など) で使用できます。

tellg入力ストリーム (istream、ifstream、stringstream など) に使用できるマッチングがあります。stringstreamは入力と出力の両方をサポートしているため、 と の両方がtellpあることに注意してくださいtellg

pmeansputgmeansの 2 つをそのままにしておくとget、「位置を取得」(つまり、読み取り位置) が必要な場合は、 を使用しますtellgput(書き込み) 位置が必要な場合は、 を使用しますtellp

fstreamは入力と出力の両方をサポートしているため、tellgtellpの両方が含まれていますが、一度に呼び出すことができるのはどちらか 1 つだけです。最新の操作が書き込みだった場合は、 を呼び出すことができますtellp。最新の操作が読み取りだった場合は、 を呼び出すことができますtellg。そうしないと、意味のある結果が得られません。

于 2013-05-29T22:50:01.423 に答える
2

fout::tellp() は、次に書き込まれるバイトの位置を示します。

于 2013-05-29T22:49:39.503 に答える
2

tellgまたはを使用して現在の位置を取得できますtellp

fin.tellg();  // postition of "get" in istream or iostream (fstream)
fout.tellp(); // position of "put"  in ostream or iostream (fstream)
于 2013-05-29T22:43:04.337 に答える