2010-07-25 2 views
1

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

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

У вас есть книга на C++? Если да, просмотрели ли вы в своей главе обсуждения стандартной библиотеки ввода-вывода? Если нет, я настоятельно рекомендую получить одну из вводных книг, перечисленных в [The Definitive C++ Book Guide and List] (http://stackoverflow.com/questions/388242/). –

+0

У меня нет книги на С ++. Я смотрел http://www.cplusplus.com/reference/iostream/istream/getline/, и меня смутил параметр 'streamsize n'. – Hristo

+0

Если вы нажмете на страницу «streamsize», в нем говорится: «Тип - это синоним, определенный реализацией одного из подписанных базовых интегральных типов (обычно подписанный int или подписанный long)». –

ответ

5

Пара вещей:

  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. 
} 
+0

.. как бы я обрабатывал пробелы? – Hristo

+0

По умолчанию пустое место молча отбрасывается оператором >> –

1

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

ifs >> number; 

извлечет номер из потока и хранить его в 'числа'.

Looping, зависит от содержания. Если это были все цифры, то вроде:

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

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

+0

(Если кто видел это в первые 2 минуты, я оставил фактическое извлечение на моем первом проходе) – Iain

+2

Хехех, в следующий раз просто ниндзя отредактируйте его прямо и ничего не скажешь , Это путь переполнения стека. –

+0

@John ...hahaha: D – Hristo

Смежные вопросы