МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Пример 17.1. Запись текстовой информации в файл.-Работает





Финансовый университет при правительстве РФ

 

ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ

 

Бакалавры: 230700 "Прикладная информатика"

Язык программирования С++

Лабораторная работа № 17(01-3)

ФАЙЛОВЫЙ ВВОД-ВЫ­ВОД.

ТЕКСТОВЫЕ И ДВОИЧНЫЕ ФАЙЛЫ

Автор профессор кафедры "Прикладной информатики в экономике"

кандидат технических наук Л.К. Кузнецов

Сентября 2012 г.

Москва

ФУРФ


Лабораторная работа № 17

Файловый ввод-вы­вод. Текстовые и двоичные файлы

 

Цель работы:

Ознакомиться:

Ø с организацией ввода и вывода в языке С++;

Ø с понятием потока;

Ø с режимами доступа к файлам;

Ø с основными методами обработки текстовых файлов;

Ø с основными методами обработки двоичных файлов

Ø с организацией последовательного доступа к элементам двоичных файлов;

Ø с организацией произвольного доступа к элементам двоичных файлов.

Изучить возможности операций файлового ввода/вывода на языке C++.

Научиться программировать операции файлового ввода/вывода.

Получить практические навыки по программированию задач ввода-вывода с использованием текстовых и двоичных файлов.

 

1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Ниже приводятся минимальные сведения, необходимые только для вы­полнения лабораторной работы.

 

1. Файловый ввод-вывод. Текстовые файлы

 

1.1. Организация ввода и вывода. Файловая система

Операции ввода/вывода в языке С осуществляются через потоки. Поток - это логическое устройство, выдающее и принимающее информацию.

С потоком связано понятие внутреннего указателя, который определяет позицию, с которой начинается следующая операция чтения или записи. При каждой операции чтения или записи происходит автоматическое перемещение указателя.

В языке С (С++) формат стандартных файлов ввода/вывода описан в заголовочном файле stdio.h. Имена стандартных файлов ввода/вывода для языка С (С++) представлены в табл. 17.1. В момент начала выполнения программы на языке С (С++) автоматически открываются три потока: stdin, stdout, stderr.

Таблица 17.1

Потоки, определяемые в языке С и С++

Имя стандартного файла Описание
stdaux Последовательный ввод/вывод
stderr Выходной поток ошибок
stdin Стандартный ввод
stdout Стандартный вывод
stdprn Вывод на принтер

 

С++ поддерживает всю систему ввода/вывода С и добавляет к ней дополнительные возможности, связанные в основном с вводом/выводом объектов. Описание средств для создания потоков в С++ представлено в заголовочном файле iostream.h. Когда начинает работать программа на С++, открываются потоки, приведенные в табл. 17.2.

Таблица 17.2

Потоки, определяемые в языке С++

Имя стандартного файла Описание
cin Стандартный ввод - клавиатура
cout Стандартный вывод - экран
cerr Стандартная ошибка - экран
clog Буферизованная версия cerr - экран

 

Файловая система языков С и С++ состоит как бы из двух уровней: логических файлов и физических файлов, с которыми логические файлы всегда связаны.

Логический файл описывается как указатель на открываемый поток FILE * и служит средством взаимодействия с физическим файлом. Имя физического файла появляется в программе всего один раз, в тот момент, когда происходит открытие файла, осуществляемое функцией fopen() и одновременно его связывание с логическим файлом.



Основными действиями, производимыми над файлами, являются их открытие, обработка и закрытие. Обработка файлов может заключаться в считывании блока данных из потока в оперативную память, запись блока данных из оперативной памяти в поток, считывание определенной записи данных из потока, занесение определенной записи данных в поток. При этом необходимо помнить, что понятие файла в памяти ЭВМ не определено, и приобретает смысл только после его связи с внешним физическим файлом.

 

1.2. Текстовые файлы

Для работы с файлами в языке С имеется набор функций, определенных в библиотеке stdio.h.

Тип FILE определяется в заголовочном файле stdio.h и обычно представляет собой структуру, содержащую параметры реализации потока, такие как адреса буферов, указатели позиций потока, маркеры ошибок потока и т.д.

При работе с дисковыми файлами в момент их открытия следует задать режим доступа, чтобы определить, к какому файлу осуществляется доступ: к текстовому или двоичному, а также способ доступа: чтение или запись. Все это выполняется функцией fopen(), имеющей синтаксис:

FILE *fopen(const char *filename, const char *mode );

 

fopen("имя_файла", "режим_доступа")

 

Здесь filename - строка, содержащая путь и имя файла; mode - строка, определяющая режим открытия файла: на чтение или на запись; FILE -специальный тип данных для работы с файлами. Данная функция возвращает значение NULL, если файл не был успешно открыт, иначе - другое значение.

 

Режимы доступа к файлам для функции fopen() приведены в табл. 17.3.

Таблица 17.3

Режимы доступа к файлам

Режим Описание
r Открыть файл только для чтения, модификации файла запрещены.
w Создать новый файл только для записи. При попытке открыть таким способом существующий файл происходит перезапись файла. Чтение данных из файла запрещено.
a Открыть файл для дозаписи. Если файла с указанным именем не существует, он будет создан.
r+ Открыть существующий файл для чтения и записи.
w+ Создать новый файл для чтения и записи.
а+ Открыть существующий файл для дозаписи и чтения.

 

Таким образом, чтобы открыть текстовый файл, например, для чтения, нужно произвести следующие действия:

 

FILE *ft; // объявили указатель на файловый поток

ft = fopen("inp_f.txt","r"); // открыли файл inp_f.txt

 

При попытке открыть существующий файл можно допустить ошибку в его имени или в указании пути к нужному файлу. Это вызывает ошибку исполнения программы. Следует предвидеть подобные ситуации и проводить проверку возможности открытия файла. Такую проверку осуществить довольно легко, так как функция fopen() возвращает значение указателя в случае успешного его открытия и значение NULL, если доступ к файлу невозможен. Поэтому достаточно написать:

 

if (ft = fopen("inp_f.txt","r") != NULL)

{ // обработка файла

}

Текстовой файл состоит из последовательности символов, разбитой на строки путем использования управляющего символа \n. На диске текстовые файлы хранятся в виде сплошной последовательности символов, и их деление на строки становится заметным лишь в момент вывода на экран или печать, так как именно при выводе управляющие символы начинают выполнять свои функции. Текстовые файлы легко переносятся с одного типа компьютера на другой лишь в случаях, когда они содержат только символы, принадлежащие стандартному набору символов.

При работе с текстовыми файлами возможна их посимвольная или построчная обработка.

 

1.3. Основные методы обработки текстовых файлов

Файловые функции ввода/вывода fprintf() и fscanf() работают аналогично функциям printf() и scanf(), но имеют дополнительный аргумент, являющийся указателем на файловый поток.

Рассмотрим последовательность действий по созданию простого текстового файла на языке C и записи в него текстовой информации.

Пример 17.1. Запись текстовой информации в файл.-Работает

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

int main()

{

char str_file[]="String for file"; // Строка для файла

FILE* fp = fopen("prim17-1.txt","w");

if(fp != NULL)

{

printf("Идет запись информации в файл…\n");

for(int i=0;i < strlen(str_file);i++)

putc(str_file[i],fp);

}

else printf("Невозможно открыть файл на запись.\n");

fclose(fp);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

В данном примере задается специализированный указатель fp типа FILE, который инициализируется функцией fopen(). Функция fopen() в качестве первого аргумента принимает строку, в которой задан путь и имя файла. Вторым параметром определяется способ обработки файла, в данном случае, значение "w", которое означает открытие файла на запись с удалением всей прежней информации из него. Если файл открыт успешно, то указатель fp не будет равен NULL и с ним возможна работа. В этом случае с помощью функции putc() выполняется запись символов в файл, на который указывает указатель fp. Перед завершением программы открытый файл следует закрыть во избежание в нем потери данных. Это достигается функцией fclose(), которая принимает указатель на файл и возвращает значение 0 при успешном закрытии файла, иначе значение EOF.

Замечание: строка "String for file" будет записана в файл с именем "prim17-1.txt" в текущий каталог (где храниться исполняемая программа); откройте указанный файл с помощью соответствующего редактора текста и убедитесь в наличии текста в этом файле.

 

Рассмотрим теперь пример программы считывания информации из файла.





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.