Как открыть и прочитать файл, используя ifstream в C ++? - PullRequest
2 голосов
/ 25 июля 2010

Я хотел бы открыть файл и прочитать строку из него. В файле будет только одна строка, поэтому мне не нужно беспокоиться о зацикливании, хотя для дальнейшего использования было бы полезно узнать, как читать несколько строк.

int main(int argc, const char* argv[]) {

    // argv[1] holds the file name from the command prompt

    int number = 0; // number must be positive!

    // create input file stream and open file
    ifstream ifs;
    ifs.open(argv[1]);

    if (ifs == NULL) {
        // Unable to open file
        exit(1);
    } else {
        // file opened
        // read file and get number
        ...?
        // done using file, close it
        ifs.close();
    }
}

Как бы я это сделал? Кроме того, правильно ли я открываю файл с точки зрения успешного открытия?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 25 июля 2010

Пара вещей:

  1. Вы можете прочитать число с помощью оператора извлечения потока >>: ifs >> number.

  2. Стандартная библиотечная функция getline будет читать строку из файла, если вам нужна полная строка текста.

  3. Чтобы проверить, открыт ли файл, просто напишите if (ifs) или if (!ifs).Не указывайте == NULL.

  4. Вам не нужно явно закрывать файл в конце.Это произойдет автоматически, когда переменная ifs выйдет из области видимости.

Исправленный код:

if (!ifs) {
    // Unable to open file.
} else if (ifs >> number) {
    // Read the number.
} else {
    // Failed to read number.
}
1 голос
/ 25 июля 2010

Для того, что вы здесь делаете, просто:

ifs >> number;

Извлечет число из потока и сохранит его в «число».

Цикл, зависит от содержимого.Если бы это были все числа, что-то вроде:

int x = 0;
while (ifs >> numbers[x] && x < MAX_NUMBERS)
{
 ifs >> number[x];
 x++;
}

Работало бы для сохранения серии чисел в массиве.Это работает, потому что побочный эффект оператора извлечения равен true, если извлечение завершается успешно, или false, если оно завершается неудачей (из-за ошибок конца файла или диска и т. Д.)

...