- Например, символ новой строки может быть преобразован при выводе в последовательность из двух символов: возврат каретки и переход на новую строку. В свою очередь при работе с бинарным потоком никакого преобразования символов не происходит. Текущая позиции или указатель потока (файла) – это место в потоке (файле), с которого будут выполняться операции доступа к компонентам потока.
-
В С++ все операции, связанные с файловыми потоками, определены в fstream.h. Поэтому в разделе директив необходимо указать #include <fstream>.
-
Каждый класс файловых потоков (ifstream, ofstream и fstream) содержит конструкторы, с помощью которых можно инициализировать объекты этих классов различными способами.
-
Если потоковый объект создается с использованием конструктора с параметрами, то поток будет связан с файлом (файл будет открыт). Вторым параметром конструктора является режим открытия файла. Если установленное по умолчанию значение не устраивает программиста, можно указать другое, составив его из битовых масок, определенных в классе ios.
-
Если потоковый объект создается с использованием конструктора без параметров, то поток не будет связан с файлом (файл не будет открыт). Открыть файл в этом случае можно с помощью метода open( ), имеющего такие же параметры, что и у конструктора с параметрами.
-
Для закрытия потока определен метод close(), но поскольку он неявно выполняется деструктором, явный вызов необходим только тогда, когда требуется закрыть поток раньше конца его области видимости.
5
-
Чтение и запись данных текстовых файлов:
-
операции >> и << ;
-
метод getline(char [] buf, int n);
-
функция getline(istream in, string str);
-
Считывание и запись в файл блоков данных:
-
istream &read(char *buf, streamsize num);
-
ostream &write(const char *buf, streamsize num);
-
При чтении или записи данных в текстовый файл можно использовать операции << и >>. Например, для чтения целочисленной переменной x из файлового потока in необходимо использовать оператор: in>>x; а для записи в выходной файловый поток out значения цело численной переменной x: out<<x.
-
Для чтения из файлового потока строк можно использовать операцию >>, но у нее есть недостаток – она вводит строку до первого пробела.
-
Для чтения из файлового потока строк, содержащих пробелы, нужно использовать или метод getline() или специальную функцию getline().
-
Метод getline() используется для ввода строк, которые являются массивами символов с завершающем символом ‘\0’. Метод getline() считывает из входного потока (n-1) символов или менее, если символ перевода строки встретился раньше, и записывает их в строковую переменную s. Символ перевода строки также считывается (удаляется) из входного потока. Вместо символа перевода строки в строковой переменной размещается завершающий 0.
-
Функция getline() используется для ввода строк, которые являются объектами класса string.
-
Функция read() считывает num байт данных из связанного с файлом потока в буфер buf. Функция write() записывает num байт данных в связанный с файлом поток из буфера buf. Тип streamsize является разновидностью целого типа. Он позволяет хранить самое большое количество байтов, которое может быть передано в процессе любой операции ввода/вывода.
7
Пример 1: Чтение элементов одномерного массива из текстового файла и запить в текстовый файл



Пример 1: Чтение элементов одномерного массива из текстового файла и запить в текстовый файл


Пример 2: Вывод на экран содержимого текстового файла



Пример 3: Вывод на экран содержимого текстового файла



Пример 4: Запить в текстовый файл элементов двумерного массива


Пример 4: Запить в текстовый файл элементов двумерного массива


Пример 5: Чтение из текстового файла элементов двумерного массива


Пример 5: Чтение из текстового файла элементов двумерного массива