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

C++: file.seekg() does not appear to return current location

本文关键字:返回 位置 file seekg C++      更新时间:2023-10-16

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

test.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

sample.ics

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

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

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