- •3 Работа с файлами
- •3.1 Открытие и закрытие файлов
- •Void perror(const char *str);
- •3.2 Запись данных в файл и чтение данных из файла
- •Int fputc(int ch, file *fp);
- •Int fgetc(file *fp);
- •Int fputs(char*string, file *fp);
- •Int sscanf(char *buf, char *format [,указатель]…);
- •Int fwrite(void *ptr, int size, int n, file *fp);
- •Int fread(void *ptr,int size,int n,file *fp);
- •Int fprintf(file *fp, char *format [,аргумент]…);
- •Int sprintf(char *buf, char *format [,аргумент]…);
- •3.3 Произвольный доступ к файлу
- •Int fseek(file *fp, long offset, int from_where);
3.2 Запись данных в файл и чтение данных из файла
Функция посимвольной записи в файл имеет прототип:
Int fputc(int ch, file *fp);
Эта функция помещает символ int ch после преобразования в тип char в открытый поток fp, связанный с файлом. В случае успеха возвращает код этого символа, а в случае ошибки – EOF.
Функция посимвольного чтения из файла имеет прототип:
Int fgetc(file *fp);
Эта функция возвращает символ из открытого потока fp, связанного с файлом, или EOF (–1) в случае ошибки или достижения конца файла.
Пример 3.3
#include<stdio.h> |
int main() |
{char s1='Z', str1[]="Запорожье", s2; |
FILE *fp1=fopen("abc.txt","w"); |
if(fp1==NULL){puts("ошибка открытия файла"); return -1;} |
fputc(s1,fp1); |
while(str1[i]!='\0') |
{fputc(str1[i],fp1); i++;} |
fputc('\n',fp1); |
printf("Введите символ или or Ctrl-Z"); |
while((s2=getchar())!=EOF) |
fputc(s2,fp); |
fclose(fp1); |
FILE *fp2=fopen("abc.txt","r"); |
if(fp2==NULL){puts("ошибка открытия файла"); return -1;} |
char s3,str2[10], s4; |
s3=fgetc(fp2); |
printf("%c\n",s3); |
for(int j=0;j<9;j++) |
{str2[j]=fgetc(fp2); |
printf("%c",str2[j]); } |
while((s4=fgetc(fp2))!=EOF) |
putchar(s4); |
fclose(fp2); |
return 0;} |
|
|
|
Функция построчной записи в файл имеет прототип:
Int fputs(char*string, file *fp);
Эта функция переносит байты из строки string в открытый файл через поток fp. Перенос завершается при достижении символа '\0', который в файл не заносится. В случае успеха функция возвращает код последнего записанного в файл символа, а в случае ошибки – EOF.
Функция построчного чтения из файла имеет прототип:
char*fgets(char *string,int N,FILE *fp);
Эта функция принимает байты из открытого файла и размещает их по адресу, заданному указателем string. Прием завершается после приема N байт или при получении символа '\n', который тоже передается в строку string. Последним символом является '\0'. В случае успеха возвращает указатель на строку string, а в случае ошибки или достижения конца файла – NULL–указатель. Для успешного чтения строки из файла надо зарезервировать достаточное место в памяти.
Пример 3.4
#include<stdio.h> |
int main() |
{FILE *fp1=fopen("abc.txt","w"); |
if(fp1==NULL){puts("ошибка открытия файла"); return -1;} |
char *st1="Физика",*ms1[3]={"ТЕК","КЕ","ПТЦА"}; |
fputs(st1,fp1); |
fputs("\n",fp1); |
for(int i=0;i<3;i++) |
{fputs(mst1[i],fp1); |
fputs("\n",fp1); } |
fclose(fp1); |
FILE *fp2=fopen("abc.txt","r"); |
if(fp2==NULL){puts("ошибка открытия файла"); return -1;} |
char st2[20], mst2[3][20]; |
fgets(st2,20,fp2); |
puts(st2); |
for(int j=0;j<3;j++) |
{fgets(mst2[j],20,fp2); |
puts(mst2[j]); } |
fclose(fp2); |
return 0;} |
|
Форматированный ввод-вывод данных является частным случаем строкового ввода-вывода. Особенность этого ввода-вывода то, что при переносе данных между файлом через открытый поток и программой происходит преобразование этих данных в соответствии с заданными спецификаторами формата.
Функция форматированной записи в файл имеет прототип:
