Пример 3. (записывают информацию в файл, затем на экран выводятся результаты обработки информации, записанные в файле)



#include <iostream>using namespace std;int main(){ FILE *f; int n, nn,m; if((f=fopen("int.dat","w"))==0) perror("int.dat"); for(n=1;n<11;n++) fprintf(f, "\n%d %d", n, n*n); fclose(f); if ((f=fopen("int.dat","r"))==0) perror("int.dat"); m=1; while(fscanf(f, "%d %d",&n, &nn)&& m++<11)     printf("\n%d %d",n,nn); fclose(f); system("pause"); return 0;}

Основные алгоритмы работы с файлами

Порядок работы с текстовыми и двоичными файлами аналогичен.

Для записи данных в файл нужно выполнить:

1. Описать файловую переменнуютипа FILE *.

2. Открыть файл для записи с помощью функции fopen.

3. Записать данные в файл с помощью функции fprintf или fwrite.

4. Закрыть файл с помощью функции fclose.

Для чтения данных из файла нужно выполнить:

1. Описать файловую переменную типа FILE *.

2. Открыть файл для чтения с помощью функции fopen.

3. Считать данные из файла с помощью функции fscanf или fread.

4. Закрыть файл с помощью функции fclose.

Одновременно для работы сразу может быть открыто несколько файлов, чаще это входной и выходной потоки.

Пример 4. Написать программу, реализующую подсчет количества символов в заданном тексте и файловый ввод-выводданных. Работа программы должна включать ввод пользователем с клавиатуры имен входного и выходного файлов. Результат работы программы сохраняется в выходном файле, а также выводится на экран.

#include <iostream>using namespace std;int main(){  int sum=0; char c,file1[10],file2[10]; FILE *t,*g; printf("Введите имя входного файла : "); scanf("%s",file1); printf("Введите имя выходного файла "); scanf("%s",file2); t=fopen(file1,"r"); g=fopen(file2,"w"); printf("\nСодержимое входного файла %s:\n",file1); while(!feof(t)) { c=getc(t); if (c!=10&& c!=-1)     //символы конца строки и конца файла не считаются sum++; printf("%c", c); } fprintf(g,"%d",sum); printf("\nКоличество символов в тексте входного файла равно %d",sum); fclose(t); fclose(g); system("pause"); return 0;}

III. Операции с файлами в потоковом режиме

 

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

Поток ifstream служит для работы с файлами в режиме чтения.

Поток ofstream служит для работы с файлами в режиме записи.

Поток fstream служит для работы с файлами в режиме как чтения, так и записи.

В программах на C++ при работе с текстовыми файлами в потоковом режиме необходимо подключать библиотеки iostream и fstream.

Функция открытия файла

Для того чтобы начать работать с текстовым файлом, необходимо описать переменную типа ofstream.

Например, с помощью оператора

ofstream F;

будет создана переменная F для записи информации в файл.

На следующем этапе файл необходимо открыть для записи. В общем случае оператор открытия файла будет иметь вид:

F.open("file", mode);

где F – переменная, описанная как ofstream;

file – полное имя файла на диске;

mode – режим работы с открываемым файлом.

Существуют следующие режимы для открытия файла.

Режимы работы с файлом при открытии

Режим Описание
ios::in открыть файл в режиме чтения данных, этот режим является режимом по умолчанию для потоков ifstream
ios::out открыть файл в режиме записи данных, этот режим является режимом по умолчанию для потоков ofstream
ios::app открыть файл в режиме записи данных в конец файла
ios::ate передвинуться в конец уже открытого файла
ios::trunc очистить файл, это же происходит в режиме ios::out
ios::nocreate не выполнять операцию открытия файла, если он не существует
ios::noreplace не открывать существующий файл
ios::binary открыть двоичный файл

Параметр mode может отсутствовать, в этом случае файл открывается в режиме по умолчанию для данного потока:

ios::in – для потоков ifstream,

ios::out – для потоков ofstream.

После удачного открытия файла (в любом режиме) в переменной F будет храниться 1 (true), в противном случае 0 (false). Это позволит проверять корректность операции открытия файла.

Если открытие файла завершилось неудачей, объект, соответствующий потоку, будет возвращать значение 0:

if (!ofs){   cout << "Файл не открыт\n"; }

Проверить успешность открытия файла можно также с помощью функции is_open(), имеющей следующий прототип:

Функция возвращает 1, если поток удалось связать с открытым файлом. Например,

if (!ofs.is_open())   cout << "Файл не открыт\n";

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

Первый способ

ofstream F;F.open("abc.txt", ios::out);

Второй способ, режим ios::out является режимом по умолчанию для потока ofstream

ofstream F;F.open("abc.txt");

Третий способ объединяет описание переменной типа поток и открытие файла в одном операторе.

ofstream F("abc.txt", ios::out);

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

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

Например, для записи в поток F переменной a, оператор вывода будет иметь вид:

F << a;

Для последовательного вывода в поток G переменных b, c и d оператор вывода станет таким:

G << b << c << d;

Чтение из файла выполняется корректно до достижения конца файла. Для проверки, достигнут ли конец файла, можно использовать функцию

ios::eof(),

которая имеет прототип int eof();.

Данная функция возвращает 0, если конец файла не достигнут, и значение 1 при достижении конца файла.

Функция закрытия файла

Открытые на диске файлы после окончания работы с ними рекомендуется закрыть. Оператор закрытия файла будет иметь вид:

F.close;

где F – переменная для записи информации в файл.


Дата добавления: 2022-12-03; просмотров: 25; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!