Пример 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;Чтение из файла выполняется корректно до достижения конца файла. Для проверки, достигнут ли конец файла, можно использовать функцию
|
|
которая имеет прототип int eof();.
Данная функция возвращает 0, если конец файла не достигнут, и значение 1 при достижении конца файла.
Функция закрытия файла
Открытые на диске файлы после окончания работы с ними рекомендуется закрыть. Оператор закрытия файла будет иметь вид:
F.close;где F – переменная для записи информации в файл.
Дата добавления: 2022-12-03; просмотров: 25; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!