File Input and Output

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

open input file while( there is input left ) { read next input item process it} close input file

Example 2 Pseudocode to read input from a file

 

Listing 5 contains a typical way to open and read a file of integers.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: #include <fstream>#include <iostream>#include <cstdlib> using namespace std; int main(int argc, char* argv[]) { ifstream inf; inf.open("somefile.txt"); if (! inf) { // Check to see if file opened cerr << "Could not open file!" << endl; return EXIT_FAILURE; } int x; // While input remains, read an integer. while (inf >> x) { cout << x << endl; } inf.close(); // Close the input file return EXIT_SUCCESS;}
Listing 5 File input

Объект, используемый во входе файла, имеет тип ifstream. Так как этот класс не часть C++ языка по умолчанию, мы должны включать его библиотеку в нашу программу. Это сделано в линии 1. Линия 9 объявляет объект типа ifstream, и линия 10 вызывает функцию участника, открытую, чтобы открыть файл. Это - хорошая практика программирования, чтобы проверить ли попытка открыть файл, за которым фактически следуют. Кроме того, использование оператора извлечения в условном предложении while-loop в линии 20. Пока попытка извлечения преуспевает, true возвращен (и ценность, прочитанная от файла, назначена на x). Отказ прочитать другое целое число сообщен ценностью false. Это заканчивает while-loop.

Продукция файла напоминает вход файла. Мы все еще должны включать ссылку на fstream библиотеку, но мы используем объект ofstream вместо объекта ifstream. Вот пример.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: ofstream onf;onf.open("output.txt"); if (! onf) { // Check to see if file opened cerr << "Could not open file!" << endl; return EXIT_FAILURE;} for (int i = 1; i <= 10; i++) { onf << "This is line " << i << endl;} onf.close(); // Close the output file
Listing 6 File output

Имейте в виду, что I/O is stream based. Мы читаем или пишем одно, начинающийся в начале файла и продолжаем пока конец файла не достигнут. По техническим причинам это является трудным, чтобы двинуться вперед-назад, и единственный метод доступа, который может быть осуществлен разумно эффективно, является простым началом закончить проход через файл.