C++查找ofstream的大小

5

我有一段代码,目前它执行以下操作:

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个回答

8
你想要使用tellp。这适用于输出流(例如ostream,ofstream,stringstream)。
有一个匹配的tellg可用于输入流(例如istream,ifstream,stringstream)。请注意,stringstream同时支持输入和输出,因此它具有tellptellg
至于保持两者的区分,p表示put,而g表示get,因此如果您想要“get position”(即读取位置),则使用tellg。如果您想要put(写入)位置,则使用tellp
请注意,fstream同时支持输入和输出,因此它包括tellgtellp,但是在任何给定时间只能调用其中一个。如果最近的操作是写入,则可以调用tellp。如果最近的操作是读取,则可以调用tellg。否则,您将无法获得有意义的结果。

我提出了一个相关问题,关于如何处理tellg/tellp的输出,因为它们可能会溢出long long。我在这里添加一个链接,以帮助未来的其他人:https://dev59.com/VY_js4cB2Jgan1znBpJg - user788171

3

您可以使用tellgtellp获取当前位置:

fin.tellg();  // postition of "get" in istream or iostream (fstream)
fout.tellp(); // position of "put"  in ostream or iostream (fstream)

为什么我在代码示例中打印“find”,它是输出而不是输入。 - user788171

3

在输出流操作之前和之后,使用 ostream::tellp()。


2

fout::tellp()将给出下一个要写入的字节的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接