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同时支持输入和输出,因此它同时具有tellptellg

至于保持两个直,p手段putg手段get,所以如果你想要你使用的“获取位置”(即读取位置)tellg。如果您想要put(写入)位置,请使用tellp.

请注意,它fstream同时支持输入和输出,因此它同时包含tellgtellp,但您在任何给定时间只能调用其中一个。如果最近的操作是写入,那么您可以调用tellp. 如果最近的操作是读取,您可以调用tellg. 否则,您不会得到有意义的结果。

于 2013-05-29T22:50:01.423 回答
2

tellg您可以使用or获取当前位置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 回答
2

在之前和之后使用 ostream::tellp()

于 2013-05-29T22:49:00.590 回答
2

fout::tellp() 将为您提供要写入的下一个字节的位置。

于 2013-05-29T22:49:39.503 回答