1

Тема: Як повернути вказівник fstream на початок файлу?

Вітаю вас форумчани!

Я маю функцію, що перевіряє весь файл, доки не досягне EOF.

while ( (character = fpointer.get()) != EOF ) {
            if (character == '/') {
                if ( (character = fpointer.get()) == '/') { // There is a comment
                    // Go to end of a line
                    while( ((character = fpointer.get()) != '\n') && (character != EOF)) { }
                    if (character == EOF) {
                        break;
                    }
                } else { // There is line, started by '/'
                    while( ((character = fpointer.get()) != '\n') && (character != EOF)) { }
                    if (character == '\n') {
                        number_of_strings++;
                    } else if (character == EOF) {
                        number_of_strings++;
                        break;
                    }  
                }
            } else if (isalpha(character)) { // There is a name
                while( ((character = fpointer.get()) != '\n') && (character != EOF)) { }
                if (character == '\n') {
                    number_of_strings++;
                } else if (character == EOF) {
                    number_of_strings++;
                    break;
                }    
            }
        }

Після неї мені знову треба перевіряти файл із самого початку. Я знаю, що є функція seekg(). Однак вона не працює. Я думаю, що це пов’язано із тим, що при досягненні EOF виставляються прапорці eofbit і failbit.

Я зробив так:

// return pointer to the start of the file
        fpointer.close();
        fpointer.open(file, ios::in);

Я хотів спитати чи це нормально, чи все ж таки треба повертати покажчик на початок файлу?

2

Re: Як повернути вказівник fstream на початок файлу?

Як і написано на cplusplus.com, функція seekg не працює, коли виставлений прапорець eofbit, але це до C++11(в C++11 вона працює і знімає прапорець eofbit). В старіших версіях C++ я не знаю кращого способу ніж перевідкрити файл

3

Re: Як повернути вказівник fstream на початок файлу?

https://msdn.microsoft.com/ru-ru/librar … -snippet-1
другий флаг функi Seek(par1, par2).

Подякували: leofun012

4 Востаннє редагувалося -=ЮрА=- (11.08.2016 06:05:39)

Re: Як повернути вказівник fstream на початок файлу?

Зроби ось так

 ifstream ifs;
ifs.clear();//видаляємо флаги помилок та eof
ifs.seekg(0, ios::beg);

Я хотів спитати чи це нормально, чи все ж таки треба повертати покажчик на початок файлу?

- все зводиться до того скільки разів будемо відкривати файл. Організація потоку дуже коштовна операція, краще юзати повторно готовий потік.

fpointer

Подякували: leofun012

5 Востаннє редагувалося -=ЮрА=- (11.08.2016 06:12:13)

Re: Як повернути вказівник fstream на початок файлу?

овертати покажчик

не покажчик а вказівник, можна курсор говорити.
https://translate.google.com.ua/?hl=ru# … 0%B8%D0%BA
Вже рідну так перекрутили, що іноді відкриваєш технічний текст і думаєш "ну що за бовдур писав технічні терміни", наприклад HDD - твердий диск і у такому дусі. Далі, у тебе не вказівник(pointer), а змінна класу fstream (те що у англомовній літературі йде як variable)

Подякували: leofun012