Вопрос о функции seekg () ifstream в C ?

#c #file

#c #файл

Вопрос:

Я тестирую следующий код:

 int _tmain(int argc, _TCHAR* argv[])
{
    int sum = 0;
    int x;
    ifstream inFile;

    inFile.open("test.txt");
    if (!inFile) {
        cout << "Unable to open file";
        exit(1); // terminate with error
    }

    while (inFile >> x) {
        cout << x << endl;
    }
    cout << "-----------------------------" << endl;
    // Reading from beggining file again
    inFile.seekg(0, ios::beg);
    while (inFile >> x) {
        cout << x << endl;
    }

    inFile.close();

    return 0;
}
  

В приведенном выше коде я хочу прочитать файл, затем переместить указатель в начало файла и прочитать снова.
Я использовал inFile.seekg(0, ios::beg); , чтобы вернуться к началу файла, но это не работает?
Кто-нибудь может мне помочь, пожалуйста?
Спасибо

Ответ №1:

Перед поиском к началу вам необходимо снять все флаги ошибок, иначе никакие операции с потоком не выполняются:

 inFile.clear();
inFile.seekg(0,std::ios::beg);
  

Это потому, что eof бит будет установлен, потому что вы дошли до конца файла раньше.

Ответ №2:

Я думаю, вам нужно сбросить флаги ошибок ifstream с помощью inFile.clear(). В противном случае он все еще думает, что достиг конца файла.

Ответ №3:

 int autoinc()   //auto incriment no//
{
    fstream fp;

    fp.open("birthreg.dat",ios::in);

    fp.seekg(0,ios::beg) ; **//what used this function**

        int t=0;

    while(fp.read((char*)amp;st,sizeof(birthreg)))

    t=reg_no;

    fp.close();

    return t;

}
  

Комментарии:

1. отрицание без объяснения причин, странный отступ, не компилировался из-за неправильного синтаксиса комментариев, приведение в стиле C, что такое reg_no , и я мог бы продолжить.