Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Языки программирования.docx
Скачиваний:
28
Добавлен:
17.03.2015
Размер:
50.42 Кб
Скачать

Работа с файлами.

Для работы с файлами в языке СИ используется библиотека 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);

}

Работа с бинарными файлами.

“wb” – запись

“rb” – чтение.

Пример:

Fread();

Fwrite();

Size_tfread(void*buffer,size_tsize,size_tcount,FILE*fp);buffer– это указатель на буфер памяти, в которую будут считываться данные.Size– размер элементов в байтах. Использование этих функций:

Файл буквы алфавита.

FILE *fp=fopen(“me.out”, “wb”);

Char list [32];

Int I, numread, numwritten;

For(i=0;i<32;i++)

List[i]=(char)(‘a’+i);

New written=fwrite(list, sizeof(char), 32, fp);

Printf(“написать %dсимволов”,numwritten);

Fclose(fp);

Чтобы можно было дописывать файл, вместо “r(b)” нужно ставить “a(b)”.

Feof(fp);

Int remove (const char *path);

Int rename (const char *oldname, const char *newname);