Similar presentations:
Тип - файл
1.
Тип - файл2. Определение
Тип-файл представляет набор данных (чаще всегоодного типа), расположенных на внешнем устройстве и
имеющий имя.
3. Любой файл имеет три характерные особенности:
У файла есть имя
Длина вновь создаваемого файла никак не
оговаривается при его объявлении и ограничивается
только ёмкостью внешней памяти
4. Объявление типа файла
FILE *<имя переменной>;(Пример:
FILE *f;)
5. Файловые переменные нельзя
Использовать в арифметических
операциях (складывать, вычитать и т.д.)
Присваивать
6. Файловые переменные используют в
Операциях над файлами (открытие,
закрытие, переименование)
Операциях обмена (чтение, запись)
7. Режимы открытия файлов
"w" – режим записи. Если файл с таким именем
существовал, он открывается и все содержимое
стирается. Иначе файл создается автоматически.
"a" – режим добавления. Если файл с таким именем
существовал, он открывается и старое содержимое не
стирается.
"r" – режим только для чтения.
Режим запись и чтение – "w+t",
режим добавление и чтение – "a+t".
Для текстовых файлов (*.txt) пишут: "wt", "at", "rt".
8. Файловые переменные содержат следующую информацию
Тип компонентов файла;
Имя файла;
Месторасположение файла на ВУ;
Размер файла;
Значение указателя файла;
Атрибут файла.
9.
Алгоритм работы с файлом10. 1.Объявить файловую переменную
FILE *<имя переменной>;11. 2.Открыть файл
<переменная файла>=fopen("имя файла","режимоткрытия");
"имя файла" – если не в той же папке, что и проект,
прописывается полностью путь
"режим открытия“ :
”w” – для записи данных
“r” – для чтения данных
“a” – для добавленияданных
12. Пример
FILE *fin,*fout;fin=fopen(“My_file1”,”r”);
fout=fopen(“My_file2”,”w”);
13. Режимы открытия файла
“b”- двоичный поток“t”- текстовый поток
“+”- обновление файла
14. Пример
“r+” – чтение файла с обновлением, т.е. возможнаперезапись данных с усечением;
“w+” – запись в файл и одновременно чтение;
“a+” – добавление данных и чтение
15. 3.Осуществить операции обмена с файлом
Чтение
Запись
fgetc()
fputc()
fscanf()
fprintf()
fgets()
fputs()
fread()
fwrite()
16. Чтение/запись одного символа
char fgetc( FILE *f)void fputc(char c, FILE *f)
17. Пример
char Symb=fgetc(fin);fputc(Symb,fout)
18. Форматированный ввод/вывод
Чтение
fscanf(<переменная файла>, "<спецификация
преобразования данных>",&<имя переменной>);
Запись
fprintf(<переменная файла>, "<форматная
строка>",<имя переменной>);
19. Пример
fscanf(f,"%d",&x);fprintf(f,"%d\n",x);
20. Ввод/вывод блоков данных из потока данных
unsigned fread(void *ptr, unsigned size, unsigned n,FILE *f) –прочитать n элементов, длиной size байт каждый, из
заданного входного потока f в блок, на который указывает ptr.
При успешном завершении операции функция fread
возвращает число прочитанных элементов данных, при
ошибке – 0
unsigned fwrite(void *ptr, unsigned size, unsigned n,FILE *f) –
добавить n элементов, длиной size байт каждый, в заданный
выходной файл f. Данные записываются с позиции, на которую
указывает указывает ptr. При успешном завершении операции
функция fwrite возвращает число записанных элементов
данных, при ошибке – неверное число элементов данных
21. Пример
fread(&x,sizeof(x),1,f);fwrite(&x,sizeof(x),1,f);
22. 4.Разорвать связь с физическим файлом
fclose (*<переменная файла>);23. Основные процедуры для работы со всеми файлами
rename("<старое имя>", "<новое имя>"); //переименовать
int remove("<имя файла>"); //удалить
feof(<переменная файла>) //конец файла
fseek(<переменная файла>, <на сколько байт смещение>, <точка
отсчета>) // перемещение курсора (точка отсчета: 0 – начало файла,
1 – от текущего положения, 2 - от конца).
void rewind(<переменная файла>)-//установить указатель текущей
позиции в начало файла
24. Пример
Проверить, существует ли файл целых чисел. Если нет, то создать.Найти сумму компонентов файла.
25.
#include "stdio.h "#include <iostream>
using namespace std;
int main()
{
setlocale(0,"rus");
FILE *f;
int sum,i, x;
f=fopen("c.dat","wb");
printf("Создается новый файл. Вводите 5 чисел:");
for(i=0; i<5; i++)
{
scanf("%d",&x);
fwrite(&x,sizeof(x),1,f);
//fprintf(f,"%d\n",x);
}
fclose(f);
26.
f=fopen("c.dat","rb");sum=0;
fread(&x,sizeof(x),1,f);
//fscanf(f,"%d",&x);
while(!feof(f))
{
cout<<"x="<<x<<endl;
sum+=x;
fread(&x,sizeof(x),1,f);
// fscanf(f,"%d",&x);
}
remove("b.dat");
printf("сумма=%d\n",sum);
system("pause");
return 0;
}