Например, символ новой строки может быть преобразован при выводе в последовательность из двух символов: возврат каретки и переход на новую строку. В свою очередь при работе с бинарным потоком никакого преобразования символов не происходит. Текущая позиции или указатель потока (файла) – это место в потоке (файле), с которого будут выполняться операции доступа к компонентам потока.
В С++ все операции, связанные с файловыми потоками, определены в 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: Чтение из текстового файла элементов двумерного массива