Чтение из файла в C ++ - PullRequest
       16

Чтение из файла в C ++

0 голосов
/ 21 января 2010

Я пытаюсь написать рекурсивную функцию, которая выполняет некоторое форматирование в файле, который я открываю для назначения класса. Это то, что я написал до сих пор:

const char * const FILENAME = "test.rtf";

void OpenFile(const char *fileName, ifstream &inFile) {
    inFile.open(FILENAME, ios_base::in);
    if (!inFile.is_open()) {
        cerr << "Could not open file " << fileName << "\n";
        exit(EXIT_FAILURE);
    }
    else {
        cout << "File Open successful";
    }
}


int Reverse(ifstream &inFile) {
    int myInput;
    while (inFile != EOF) {
        myInput = cin.get();
    }
}

int main(int argc, char *argv[]) {
    ifstream inFile;             // create ifstream file object
    OpenFile(FILENAME, inFile);  // open file, FILENAME, with ifstream inFile object
    Reverse(inFile);          // reverse lines according to output using infile object
    inFile.close();
}

Вопрос, который у меня возник, заключается в моей функции Reverse (). Это то, как я буду читать по одному символу за раз из файла? Спасибо.

Ответы [ 2 ]

1 голос
/ 21 января 2010

Вам лучше использовать это:

char Reverse(ifstream &inFile) {
    char myInput;
    while (inFile >> myInput) {
     ...
    }
}

Часто упускают из виду, что вы можете просто проверить, достиг ли входной поток EOF (или какого-либо другого плохого состояния), просто протестировав объект потока. Он неявно преобразуется в bool, а оператор istreams bool() просто вызывает (я считаю) istream::good().

Объедините это с тем фактом, что оператор извлечения потока всегда возвращает сам объект потока (так что он может быть связан с несколькими извлечениями, такими как «cin >> a >> b»), и вы получите очень лаконичный синтаксис :

while (stream >> var1 >> var2 /* ... >> varN */) { }

UPDATE

Извините, я не думаю - конечно, это пропустит пробел, который не подойдет для вашего примера обращения содержимого файла. Лучше придерживаться

char ch;
while (inFile.get(ch)) {

}

, который также возвращает объект istream, позволяя неявному вызову good().

0 голосов
/ 21 января 2010
void Reverse(ifstream &inFile) {
    char myInput;
    while ( inFile.get( myInput ) ) {
       // do something with myInput
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...