Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.

Презентация:



Advertisements
Похожие презентации
Лекция 11 Файлы. Точного определения файла не существует. Файлом может быть: Объект файловой системы (файлы, папки и т.д.) Устройство ввода/вывода (клавиатура,
Advertisements

Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
Работа с файлами.. Процедура Assign(var f; name : String); Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции.
1 Программирование на языке Си++. 2 Модуль 4. ПЕРЕГРУЗКА ОПЕРАЦИЙ Методы преобразования. Классы потоков Си++ Операции замещения и вставки Ввод/вывод в.
Потоковые классы Потоки – последовательности байт, связанные с файлом либо с устройством ввода/вывода. Потоки по направлению обмена делятся на входные,
Вводный курс в С++ Занятие 1 Олег Власенко Заместитель директора ООО СимбирСофт Старший.
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Потоки (файлы) Функции и типы для работы с потоками в стиле С описаны в модуле stdio.h. В отличие от Паскаля в С с потоком не связан тип данных. Поток.
Текстовые файлы Вербицкая Ольга Владимировна, Заозерная школа 16.
Файловый ввод- вывод данных в Pascalе Средства обработки файлов 11 класс.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Работа с файлами FILE НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
Введение в C++ Урок 1-2.
Ограничение целостности CHECK задает диапазон возможных значений для столбца. Ограничение целостности CHECK задает диапазон возможных значений для столбца.
Запросы в базе данных. Понятия запроса При работе с таблицами можно в любой момент выбрать из базы данных необходимую информацию с помощью запросов. Запрос.
Транксрипт:

Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2

Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в программу заголовок. В нем определено несколько классов, включая классы ifstream, ofstream и fstream. Эти классы являются производными от классов istream и ostream. Классы istream и ostream, в свою очередь, являются производными от класса ios, поэтому классы ifstream,. ofstream и fstream также имеют доступ ко всем операциям, определяемым классом ios

Имеется три типа потоков:ввода,выводаи ввода/вывода Перед тем как открыть файл, нужно, во-первых, создать поток. Для создания потока ввода необходимо объявить объект типа ifstream. Для создания потока вывода объект типа ofstream. Потоки, которые реализуют одновременно ввод и вывод, должны объявляться как объекты типа fstream Например, в следующем фрагменте создается один поток для ввода, один поток для вывода и еще один поток одновременно для ввода и для вывода: ifstream in; // ввод ofstream out; // вывод fstream io; // ввод и вывод

После создания потока, одним из способов связать его с файлом является функция ореn(). Эта функция является членом каждого из трех потоковых классов. void if stream::open (const char *имя_файла, openmode режим = ios::in); void ofstream::open(const char *имя_фляла, openmode режим = ios::out | ios::trunc); void fstream::open(const char *имя файла, openmode режим = ios::in | ios::out); Здесь имя_файла имя файла, в которое может входить и спецификатор пути. Значение режим задает режим открытия файла. Оно должно быть значением типа openmode, которое является перечислением, определенным в классе ios.

Значение режим может быть одним из следующих: ios::арр ios::ate ios::binary ios::in ios: :out ios::trunc Вы можете объединить два или более этих значения с помощью оператора OR. Рассмотрим, что означает каждое из этих значений.

Значение ios::app вызывает открытие файла в режиме добавления в конец файла. Это значение может применяться только к файлам, открываемым для вывода. Значение ios::ate задает режим поиска конца файла при его открытии. Хотя значение ios::ate вызывает поиск конца файла, тем не менее, операции ввода/вывода могут быть выполнены в любом месте файла. Значение ios::in задает режим открытия файла для ввода. Значение ios::out задает режим открытия файла для вывода. Значение ios::binary вызывает открытие файла в двоичном режиме. По умолчанию все файлы открываются в текстовом режиме. В текстовом режиме имеет место преобразование некоторых символов, например последовательность символов "возврат каретки/перевод строки" превращается в символ новой строки.

Если же файл открывается в двоичном режиме, такого преобразования не выполняется. Любой файл, независимо от того, что в нем содержится отформатированный текст или необработанные данные может быть открыт как в текстовом, так и в двоичном режиме. Отличие между ними только в отсутствии или наличии упомянутого символьного преобразования. Значение ios::trunc приводит к удалению содержимого ранее существовавшего файла с тем же названием и усечению его до нулевой длины. При создании потока вывода с помощью ключевого слова ofstream любой ранее существовавший файл с тем же именем автоматически усекается до нулевой длинны. В следующем фрагменте для вывода открывается файл test: ofstream mystream; mystream.open("test");

Режим функции ореn() по умолчанию устанавливаем в значение, соответствующее типу открываемого потока, поэтому нет необходимости указывать его явно. Если выполнение функции ореn() завершилось с ошибкой, в булевом выражении поток будет равен значению false. Этот факт можно использовать для проверки правильности открытия файла с помощью, например, такой инструкции: if (!mystream){ cout

Проверить правильность открытия файла можно также с помощью функции is_ореn(), являющейся членом классов ifstream, ofstream и fstream. Ниже показан прототип этой функции: bool is_open(); Функция возвращает истину, если поток удалось связать с открытым файлом, в противном случае функция возвращает ложь. Например, в следующем фрагменте проверяется, открыт ли файл, связанный с потоком if(!mystream.is_open()) { cout

Хотя использовать функцию ореn() для открытия файла в целом правильно часто вы этого делать не будете, поскольку у классов ifstream, ofstream stream есть конструкторы, которые открывают файл автоматически. Конструкторы имеют те же параметры, в том числе и задаваемые по умолчанию что и функция ореn(). Поэтому будем пользоваться таким способом открытия файла: ifstream mystream("myflie"); // открытие файла для ввода Как уже установлено, если по каким-то причинам файл не открывается, переменная, соответствующая потоку, в условной инструкции будет равна: значению false. Поэтому, независимо от того, используете ли вы конструктор или явно вызываете функцию ореn(), вам потребуется убедиться в успешном открытии файла путем проверки значения потока. Для закрытия файла используйте функцию-член close(). Например, чтобы закрыть файл, связанный с потоком mystream, необходима следующая инструкция: mystream.close();

Функция close() не имеет параметров и возвращаемого значения. С помощью функции eof(), являющейся членом класса ios, можно определить, был ли достигнут конец файла ввода. Ниже показан прототип этой функции: bool eof(); Функция возвращает истину, если был достигнут конец файла в противном случае функция возвращает ложь. После того как файл открыт, очень легко считать из него или записать в него текстовые данные. Просто используйте операторы > так же, как это делалось для консольного ввода/вывода, только замените поток cin или cout тем потоком, который связан с файлом. Так же, как и операторы и для чтения из файла и записи в файл годятся функции С fprintf() и fscanf(). Вся информация в файле хранится в том же формате, как если бы она находилась на экране. Следовательно, файл, созданный с помощью оператора , должен быть файлом с отформатированным текстом.

Рассмотрим примеры: int main() { ofstream fout("test"); // создание файла для вывода if(!fout) { cout

int main(int argc, char *argv[]) { if(argc!=2) { cout \n"; return 1; } ofstream out(argv[1]); // файл для вывода if(!out) { cout

int main(int argc, char *argv[]) { if(argc!=3) { cout \n"; return 1; } ifstream fin(argv[1]); // открытие файла для ввода ofstream fout(argv[2]); // создание файла для вывода if(!out) { cout ch; if(ch==' ') ch = '|'; if(!fin.eof()) fout

Задания на практику 1. Напишите программу для копирования текстового файла. 2. Напишите для подсчета числа слов в файле. Успехов!