Краткие теоретические сведения. Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое

Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое.

Прежде чем работать с файлом, его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле: имя, путь и т.д.

В языке С это выполняет функция fopen(). Она связывает физический файл на носителе с логическим именем в программе. Логическое имя – это указатель на файл, т.е. на область памяти, где хранится информация о файле. Указатели на файлы необходимо объявлять. Формат объявления такого указателя следующий:

FILE *указатель на файл;

Формат объявления функции

fopen (“строка_1”, “строка_2”);

в строке_1 (заключенной в кавычки) указывается место, в которое вы собираетесь поместить файл, например “a:mas_dat.dat” – файл с именем mas_dat.dat будет находиться на дискете (а:), “d:\\work\\sved.txt” – файл с именем sved.txt будет находиться на d:, в каталоге work.

В строке_2 указываются коды режимов доступа к открываемым файлам:

w - файл открывается только для записи; если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается;

r - файл открывается только для чтения; если такого файла нет, то возникает ошибка;

a - файл открывается для добавления в конец новой информации;

r+ - файл открывается для редактирования данных; возможны и запись, и чтение информации;

w+ - то же, что и для r+;

a+ - то же, что и для a, только запись можно выполнять в любое место файла; доступно и чтение файла;

t - файл открывается в текстовом режиме; указывается поле r, w, a, r+, w+, a+;

b - файл открывается в двоичном режиме; указывается поле r, w, a, r+, w+, a+.

Текстовый режим отличается от двоичного тем, что при открытии файла как текстового пара символов «перевод строки», «возврат каретки» заменяется на один символ: «перевод строки» для всех функций записи данных в файл, а для всех функций вывода символ «перевод строки» теперь заменяется на два символа: «перевод строки», «возврат каретки».

По умолчанию файл открывается в текстовом режиме.

Пример:

FILE *f;

f= fopen ("d:\\work\\Dat_sp.cpp", "w");

или

FILE *f= fopen ("d:\\work\\Dat_sp.cpp", "w");

- открывается для записи текстовый файл Dat_sp.cpp с указателем f, который будет находиться на диске d, в каталоге work.

Если при открытии файла произошла ошибка, функция fopen () возвращает значение NULL. Приведем пример стандартной последовательности операторов, необходимых для корректной работы с файлом:

#include <stdio.h>

...

FILE *f_my;

If(!(f_my = fopen(“rez.txt”, “r+t”)))

{

puts(“\n Ошибка при открытии файла!”);

getch(); return;

}

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

fclose(f_my);

...

После работы доступ к файлу необходимо закрыть с помощью функции fclose (указа­тель_на_файл). Например, из предыдущего примера файл закрывается так: fclose (f);

Для закрытия нескольких файлов введена функция, объявленная следующим образом: void fcloseall (void);

Для работы с текстовыми файлами удобнее всего пользоваться функциями fprintf (), fscanf (). Формат параметров и выполняемые функции аналогичны известным операторам форматного ввода-вывода, только добавлен параметр – указатель на файл, к которому применяется данная функция. Рассмотрим простой пример:

#include<stdio.h>

void main()

{

int a=2,b=3;

FILE *f1;

if(!(f1=fopen(“d:\\work\\f_rez.txt”,”w+t”)))

{

puts(“\n Файл не создан!”);

getch(); return;

}

fprintf(f1,” Файл результатов \n”);

fprintf(f1,” %d плюс %d = %d\n”,a,b,a+b);

fclose(f1);

}

Просмотрев содержимое файла, можно убедиться, что данные в нем располагаются так же, как на экране при использовании функции printf ().

Функция int fgets (char *S,int m,FILE *fp) – выполняет чтение строки S из файла fp до тех пор, пока не встретит символ '\n' или пока не будет считано m байт.

Функция int fputs (char *S, FILE *fp) - записывает строку S в файл fp до тех пор, пока не встретится '\0', который в файл не переносится и на символ '\n' не заменя­ется.

Функции работы с текстовыми файлами удобны при создании результирующих файлов для отчетов по лабораторным и курсовым работам. Для создания баз данных удобнее пользоваться функциями работы с бинарными файлами. В основном прототипы этих функций описаны в библиотеках stdio.h и io.h. Рассмотрим некоторые из них:

1) int fread (void * ptv, int size, int n, FILE *fp) - считывает n блоков по size байт каждый из файла fp в область памяти, на которую указывает ptv (необходимо заранее отвести память под считываемый блок);

2) int fwrite (void * ptv, int size, int n, FILE *fp) - записывает n блоков по size байт каждый из области памяти, на которую указывает ptv в файл fp;

3) int fileno (указатель_файла) – возвращает дескриптор файла (число, определяющее номер файла);

4) long filelength (int дескриптор_файла) – возвращает длину файла в байтах;

5) int chsize (int дескриптор_файла, long позиция) – выполняет изменение размера файла, признак конца файла устанавливается после байта с номером «позиция»;

6) int fseek (указатель_файла, long количество_байт, int код) – выполняет смещение указателя на количество_байт в направлении признака код:

0 - от начала файла;

1 - от текущей позиции указателя;

2 - от конца файла;

7) long ftell (указатель_файла) - возвращает значение указателя на текущую позицию файла (-1 – ошибка);

8) int feof (указатель_файла) – возвращает ненулевое значение при правильной записи признака конца файла;

9) int fgetpos (указатель_файла,long*текущая_позиция) – определяет значение текущей позиции файла; возвращает 0 при успешном завершении.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: