Для работы с файлами в языке СИ используется библиотека stdio.h. перед началом работы с файлом его следует открыть, что достигается с помощью функции fopen().
FILE*fopen(const char* filename, const char* mode). В данном случае filename – строка содержащая путь и имя файла, mode строка определяющая режим открытия файла на чтение или на запись. FILE* - специальный тип данных, созданный для работы с файлом.
NULL появляется если файл не открыт или произошла ошибка, иначе другое значение. Пример записи текстовой информации фай
ла:
#include <stdio.h>
Main(){
Char str[]=”моя строка”;
FILE *fp=fopen(“myfile.txt”, “w”);
If (fp!=NULL){
Printf(“пишем в файл”);
For (int i=0; i<strlen(str); i++)
Puts(str[i], fp);}
Else
printf(“ошибка при открытии файла”);
fclose(fp); fp – поток для работы с файлом
w означает открытие файла на запись с удалением всей информации из него. Если файл открыт успешно, fp!=NULL и с ним возможна работа. Далее с помощью puts выполняем запись символов, на которые указывает fp. Чтобы не потерять информацию, с помощью fclose закрываем файл, на который указывает fp.
Пример чтения файла:
#include <stdio.h>
Main(){
Char str[100];
FILE *fp=fopen(“myfile .txt”, “r”);
If (fp!=NULL){
Int i=0;
Char ch;
While ((ch=getc(fp))!=EOF)
Str[i++]=ch;
Str[i]=’\0’;
Printf(str);}
Else printf(“ошибка открытия”);
Fclose(fp);
R – открытие файла на чтение
Работ а с файлами типа puts() и gets() не всегда удобна, т.к. это посимвольный ввод и вывод.
Fputs и fgets со строкой.
Пример использования построчного ввода и вывода.
Char[]=”моя строка”;
FILE *fp= fopen(“my.txt”, “w”);
If (fp!=NULL){
Fputs(str, fp);
Fclose(fp);
Fp=fopen(“my.txt”, “r”);
If (fp!=NULL){
Fgets(str, sizeof(str), fp;
printf(str));
}
Fclose(fp);
Для файлов также адаптированы fprintf, fscanf.
Пример:
#define N 2
Struct tag_book{
Char name[100];
Char title [100];
Int year;} books[N];
Main (){
For (int i=0; i<N;i++){
Scanf(“%s”, books[i].name);
Scanf(“%s”, book[i].title);
Scanf(“%d”, &books[i].year);
}
FILE *fp=fopen(“my.txt”, “w”);
For (int i=0;i<N; i++)
Fprintf(fp,“%s %s %d”, books[i].name, books[i].title, books[i].year);
Fclose(fp);
Fp=fopen(“my.txt”, “r”);
For (int i=0; i<N; i++)
Fscanf(fp, то же что и в принтфе но зеркально);
Fclose (fp);
Онегин Пушкин .
Fseek();
Ftell();
Int fseek(FILE *fp, long offset, int origin);
Long ftell(FILE *fp);
SEEK_END – конец файла
SEEK_SET – начало файла
SEEK_CUR – текущая позиция
FILE *fp=fopen(“my.txt”, “w”);
Fprintf(fp, “моя строка”);
Fclose(fp);
Fp=fpen(“my.txt”, “r”);
Char ch;
Fseek(fp, 0L, SEEK_END);
Long length=ftell(fp);
For(int i=0;i<length;i++)
Fseek(fp, I; SEEK_SET;)
Ch=gets(fp);
Putchar(ch);
}