gpt4 book ai didi

C++:file.seekg() 似乎没有返回当前位置

转载 作者:行者123 更新时间:2023-11-28 02:31:48 26 4
gpt4 key购买 nike

我正在尝试备份 ifstream 中的一行。 file.tellg() 正在返回一个我没有预料到的值。在下面的示例中,在读取第一行(长度为 15 个字符的字符串)后,我希望 file.tellg() 返回 16。相反,它返回 41。有人可以提供一些关于此行为的见解吗?

测试.cpp

#include <fstream>
#include <ios>
#include <string>
#include <iostream>
using namespace std;

int main(){
ifstream file("sample.ics", ios::in);

string line;
string key0;
string key1;
string value0;
string value1;

getline(file, line, '\n');

cout << "line = " << line << endl;
cout << "line.length = " << line.length() << endl; // should be 15;

cout << "Attempt:" << endl;
int pos = file.tellg(); // should be 16;
cout << " pos = " << pos << endl;

getline(file, key0, ':');
getline(file, value0, '\n');

cout << " First:" << endl;
cout << " " << key0 << ":" << value0 << endl;

cout << " backing up..." << endl;
file.seekg(pos, ios_base::beg);

getline(file, key1, ':');
getline(file, value1, '\n');

cout << " Second:" << endl;
cout << " " << key1 << ":" << value1 << endl;

file.close();
}

输出:

line = BEGIN:VCALENDAR
line.length = 15
Attempt:
pos = 41
First:
CALSCALE:GREGORIAN
backing up...
Second:
ION:2.0

示例.ics

BEGIN:VCALENDAR
CALSCALE:GREGORIAN
VERSION:2.0
METHOD:PUBLISH
...

最佳答案

尝试以二进制模式打开文件,看看是否得到相同的结果:

ifstream 文件("sample.ics", ios::binary);

关于C++:file.seekg() 似乎没有返回当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com