Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
programmirovanie / ОПиАЯ_№3_9_файл_слайды.doc
Скачиваний:
34
Добавлен:
03.03.2016
Размер:
113.15 Кб
Скачать

Объявление и инициализация переменной-указателя файла

Информация, необходимая для работы с файлами в Си, хранится в файле заголовков <stdio.h>. В нем посредством оператора typedef определен тип данных FILE. Фактически это описание структуры, тип которой имеет имя FILE. Она предназначена для хранения сведений о файле.

Указатели на файлы объявляют следующим образом:

FILE *имя_указтеля_на_файл1,

*Имя_указателя_на_файл2 ,...,

*имя_указателя_на_файлN;

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

Функция, открывающая фаил, возвращает значение указателя на структуру типа FILE. Это значение надо присвоить указателю на файл:

Имя_указателя_на_файл = fopen (внешнее имя,

режим обработки файла)[;]

Здесь внешнее имя — строковое данное, представляющее собой имя файла на диске (дискете) или логическое устройство (например, "ргn").

Режим обработки файла — также строка, которая может принимать одно из следующих значений:

"r" — чтение существующего файла;

''w" — запись в файл (существующий файл будет стерт);

"а" — добавление в конец файла (если файла нет, он создается),

Можно открыть файл и для чтения, и для записи. Тогда режим обработки файла должна быть одна из строк "r+", "w+" или "a+". По умолчанию файл является текстовым.

Явно текстовый файл объявляют добавлением к режиму обработки символа t, а двоичный -символа b (например, "г+b" или "гb+").

Текстовый файл состоит из последовательности символов, разбитой на строки с помощью управляющего символа \n. Двоичный файл — это последовательность символов в двоичном формате.

ПРИМЕР

FILE *infilep,*outfilep;

infilep=fopen(“c:\data.txt”,”r”);

outfilep=fopen(“c:\results.txt”,”w”);

Функция fopen возвращает файловый указатель, который представляет адрес структуры типа FILE, содержащей информацию, необходимую для доступа к файлу.

Если функция fopen не может выполнить операцию, возвращаемый ею файловый указатель:NULL(stdio.h).

Значение указателя ==null => называется нулевым указателем (null pointer).

!!!! Не путать с null(‘\0’).

ПРИМЕР

if (infilep==null)

printf(“не открывается c:\data.txt\n”);

Функция

fclose (имя указателя на файл)[;]

закрывает файл. Результатом ее выполнения будет 0 — отключение связи между указателем на файл и внешним набором данных завершено успешно или, в противном случае, — значение EOF.

(define EOF (—1)используется для проверки конца файла, как правило, при посимвольном чтении из файла; при построчном вводе для определения конца файла обычно применяют значение NULL,так как при достижении конца файла будет получен нулевой).

ПРИМЕР

fclose(infilep);

Все открытые файлы, кроме системных (stdin, stdout, stdprn, stderr и stdaux), можно закрыть посредством одного вызова функции

fcloseall()[;]

Она возвращает либо число закрытых файлов, либо значение EOF. Типы обеих функций — int.

Функция

fflush (имя указателя на файл)[;]

возвращает 0, если успешно выполнена очистка буфера, в противном случае значение функции есть EOF.

Функция

feof(имя указателя на файл)[;]

возвращает ненулевое значение, если файловый указатель достиг конца файла, в противном случае значение функции равно 0.

Функции fgetc, fputc, fgetchar и fputchar предназначены для передачи символов.

Функция

fgetc (имя указателя на файл)[;]

читает символ из файла и преобразует его к типу int.

В случае ошибки ввода или при конце файла функция возвращает значение EOF.

Функция

fputc(символьная переменная, имя указателя на файл)[;]

пишет значение символьной переменной в файл. Если запись прошла успешно, она возвращает int-значение символьной переменной; в противном случае значение функции есть EOF.

Функция

fgets (строковая переменная,имя указателя на файл)[;]

вводит строку из файла. Ее символы считываются в строковую переменную пока не будет выполнено одно из условий:

1. Начнется новая строка.

2. Достигнут конец файла.

Функция

fputs (строковая переменная, имя указателя на файл)[;]

пишет строку в файл. Если запись прошла успешно, она возвращает int-значение последнего записанного символа строковой переменной; в противном случае ее значение есть EOF.

Функция

fscanf(uмя указателя на файл, "список форматов "[, список ввода])[;]

выполняет форматное чтение данных из файла. Если ввод произведен успешно, значением функции будет число введенных данных; при конце файла функция возвращает значение EOF. Эта функция так же, как и функция scanf, не умеет читать строки, содержащие пробелы.

Функция

fprintf (имя указателя на файл,

"список форматов"[, список вывода])[;]

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

Функция

rewind (имя указателя на файл);

передвигает файловый указатель в начало файла.

Сравнение ввода-вывода для стандартных файлов с вводом-выводом в файлы, определённые пользователем

Функции доступа Функции для доступа

stdin, stdout к любому текстовому файлу

1 scanf(“%d”,& num); fscanf(infilep,”%d”,& num);

ввод одного целочисленного ↓” c: data.txt”

значения для хранения в num

из станд. потока ввода 12 data.txt

(пр: клавиатура)

2 printf(“n=%d\n”,num); fprintf(outfilep,”n=%d\n”,num);

3 ch=getchar(); ch=getc(infilep);

4 putchar(ch); putc(ch,outfilep);

ПРИМЕР:

Записать в файл c:\tc\2.txt значения i,j, считать из файла c:\tc\1.txt новые значения i,j и распечатать на экране монитора

#include<stdio.h>

main()

{

int i,j;

FILE *inf,*outf;

Outf=fopen(“2.txt”,”w”);

Inf=fopen(“1.txt”,”r”);

i=1;

j=2;

fprintf(outf,”%d%d”,i,j);

fscanf(inf,”%d%d”,&i,&j);

printf(“%d%d”,i,j);

fclose(outf);

fclose(inf);

}

1.txt

34 56

ij

2.txt

1.2

путь c:\tc\

3456

передаем имена через командную строку

fff_1

#include <GRAPHICS.h>

#include <conio.h>

#include <stdio.h>

main(int argc,char*argv[])

{

int i,j;

FILE *inf,*outf;

if(argc==0){printf(“yk imja bx byx file”);exit(-1);}

outf=fopen(argv[2],”w”);

inf=fopen(argv[1],”r”);

i=1;

j=2;

fprintf(outf,”%d %d”,&i,&j);

fscanf(inf,”%d%d”,&i,&j);

printf(“%d%d”,i,j);

fclose(outf);

fclose(inf);

}

вызов fff_1.exe 1.txt 2.txt

вх. вых.

1.txt 2.txt

34 56 1 2

Имя в панели управления ТС

Options → Arguments

fff_2

#include <GRAPHICS.h> по кол-ву строк

#include <conio.h>

#include <stdio.h>

main(int argc, char *argv[])

{

int i, j, i7;

char a[6], b[6[;

FILE *inf, *outf;

if(argc==0) {printf(“yk imja bx byx file”);

exit(-1);}

outf= fopen(argv[2],”w”);

/* outf=fopen (“2.txt”,”n”); */

inf=fopen(argv[1],”r”);

/* inf =fopen(“1.txt”,”r”); */

for (i7=1; i7 <4; i7++) некорректно

{

fscanf(inf, “%d%d%s%s”,&I,&j,a,b);

fprintf(outf, “%d%d%s%s\n”,I,j,a,b);

}

fclose(outf);

fclose(inf);

}

вызов fff_2.exe 3.txt 5.txt

3.txt 5.txt

34 56 aaa fff

56 78 bbb nnn то же

11 3ccc ddd

fff_4

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

main(int argc, char *argv[] )

{

int i, j, i7;

char a[6], b[6];

FILE *inf,*outf;

if(argc==0) {printf(“yk imja bx byx file”);

exit(-1);}

outf=fopen(argv[2], “w”);

inf=fopen(argv[1], “r”);

while(feof(inf)==0)

(*пока не конец файла*)

{

fscanf(inf,“%d%d%s%s\n”,i,j,a,b); fprintf(outf,”%d%d%s%s\n”, i, j,a,b);

}

(* feof(inf)

= 0 не конец

≠ 0 конец *)

fclose (outf);

fclose (inf);

}

fff_4 3.txt 7.txt

Соседние файлы в папке programmirovanie