Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ метода3511.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
409.6 Кб
Скачать

Типовые операции с файлами

Объявление – включить заголовочный файл <stdio.h> и объявить FILE* name;

Для открытия файла используется функция

name =fopen( “имя_файла”, “режим” );

Функция возвращает значение 0 , если файл открыть не удалось, и ненулевое значение в случае успеха. Первый параметр – имя файла на уровне операционной системы, второй показывает, что делать с файлом (записывать, добавлять или читать информацию). Режимы: "r" - открыть файл для чтения , "w" - открыть пустой файл для чтения, если файл существует его содержимое уничтожается, "a" - открыть файл для добавления в конец файла, если файл не существует, то создается новый файл , "r+" - открыть файл для чтения и записи, файл должен существовать,"w+" - открыть пустой файл для записи и чтения, если файл существует его содержимое теряется, "a+" - открыть файл для чтения и записи в конец файла.

Функции форматного ввода и вывода данных

fprintf(name,“<управляющая строка>”[, <список аргументов>])

fscanf (name,“<управляющая строка>”[, <список аргументов>])

Управляющая строка содержит обычные символы, которые выводятся на экран, спецификации преобразования и управляющие символы константы. Каждая спецификация начинается с символа % и заканчивается символом преобразования. Между ними могут записываться “ - ” ,” . ”,” l ”, указываться размер поля или максимальное число символов или цифр для вывода.

Символы преобразования:

d - аргумент преобразуется в десятичное целое со знаком

u - аргумент преобразуется в десятичное целое без знака

o - аргумент преобразуется в восьмеричное целое без знака

x - аргумент преобразуется в шестнадцатеричное целое без знака

c - значением аргумента является одиночный символ

s - значением аргумента является строка символов

g - значением аргумента является вещественное: либо f, либо e

e - значением аргумента является вещественное типа float или double в форме с плавающей точкой

f - значением аргумента является вещественное типа float или double в форме с фиксированной точкой

p - значением аргумента является указатель

Для произвольного перемещения по файлу и прямого доступа к его компонентам используется функция fseek(name, long offset, int point), которая устанавливает указатель текущей позиции в файле на offset байт относительно точки отсчета, определенной значением point (0 - от начала файла, 1 - от текущей позиции, 2 - от конца файла). Функция возвращает значение 0, если операция выполнена правильно, и –1, если есть ошибка.

Для закрытия файла используется функция fclose(name).

Пример записи в текстовый файл:

(описание структуры man и функций vvod,vivod приведены в разделе «Структуры и Объединения»)

int writefile(man* x,int n)

{

FILE* fp; int i; char namefile[11];

cout<<" Введите имя файла"<<’n’;

cin>>namefile;

fp=fopen(namefile,"w");

if (fp==0) {cout<<"Файл не открыт!"<<’\n’; getch(); return -1;}

else

for(i=0;i<=n-1;i++)

{fprintf(fp,"%s\n", (x+i)->fam);

fprintf(fp,"%s\n",(x+i)->name);

fprintf(fp,"%d\n",(x+i)->vozr);

fprintf(fp,"%d\n",(x+i)->rost);

fprintf(fp,"%d\n",(x+i)->wes);}

fclose(fp);return 1;

}

}

Вызов данной функции: writefile(a,i), где a=new man[i].

Пример чтения из текстового файла:

(описание структуры man и функций vvod,vivod приведены в разделе «Структуры и Объединения»)

int readfile(man* x,int n)

{ FILE* fp; int i;

char namefile[11];

cout<<"Кол-во студентов: "<<n<<'\n';

cout<<"Введите имя файла"<<’\n’;

cin>>namefile;

fp=fopen(namefile,"r");

if (fp==0)

{ cout<<"Файл не открыт!"<<’\n’; getch(); return -1; }

else

for(i=0;i<n;i++)

{fscanf(fp,"%s",(x+i)->fam); fscanf(fp,"%s",(x+i)->name);

fscanf(fp,"%d",&(x+i)->vozr); fscanf(fp,"%d",&(x+i)->rost);

fscanf(fp,"%d",&(x+i)->wes);}} fclose(fp); return 1; } }

Вызов данной функции: readfile(a,i), где a=new man[i].

Пример записи в бинарный файл:

int writef(man* x,int n)

{

FILE* fp;int i;

char namefile[11];

cout<<"Введите имя файла"<<’\n’;

cin>>namefile;

fp=fopen(namefile,"wb");

if (fp==0)

{cout<<"Файл не открыт!"<<’\n’; getch(); return -1;}

else

for(i=0;i<=n-1;i++)

{fwrite((x+i),sizeof(man),1,fp); }

fclose(fp) ;return 1;}

Вызов данной функции: writef(a,i), где a=new man[i].

Пример чтения из бинарного файла:

int readfilebin(man* x,int n,char* namefile)

{FILE* fp;int i;

fp=fopen(namefile,"rb");

if (fp==0){cout<<"Файл не открыт!"<<’\n’; getch(); return -1; }

else

for(i=0;i<n;i++)

{fread((x+i),sizeof(man),1,fp);}

fclose(fp); return 1; }

Вызов данной функции: readfilebin(a,i,namefile), где a=new man[i].