Сравнение ввода-вывода для стандартных файлов с вводом-выводом в файлы, определённые пользователем
Функции доступа Функции для доступа
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
i j
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 3 ccc 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
Файлы прямого доступа.
Функцииfreadиfwriteобрабатывают последовательности байтов. Они удобны при передаче составных данных в двоичном формате.
Функция
fread(указатель, размер, количество, имя указателя на файл)[;]
читает из файла указанное количество данных. Размер каждого данного задан в байтах. Читаемая информация помещается в область памяти, адресуемую указателем. Функция возвращает число фактически считанных данных.
К примеру, введем структуру Dic из файла F:
fread(&Dic, sizeof( Dic), 1, F);
Так как в списке аргументов установлено, что следует читать по одной структуре, то текущее значение функции равно 1. После достижения конца файла функция возвращает 0.
Функция
fwrite(указатель, размер, количество, имя указателя на файл) ;
пишет данные в файл. Список ее аргументов аналогичен списку аргументов функцииfread. Функция возвращает число фактически записанных данных. Например, перешлем на диск структуру DicStr:
fwrite(Dic,sizeof(DicStr), 1, F);
Следующие две функции служат для прямого доступа к байтам (обычно внутри двоичных файлов).
Функция
fseek(имя указателя на файл, смещение, откуда)[;]
перемещает файловый указатель на заданное смещением число байтов, начиная с позиции, установленной аргументом откуда.
Смещение — это длинное целое,
а откуда — это есть:
SEEK-SET — смещение от начала файла;
SEEK-CUR — смещение от текущей позиции файлового указателя;
SEEK-END — смещение от конца файла.
При успешном выполнении функция возвращает 0. Попытка установить файловый указатель перед началом файла является ошибкой, и тогдаfseek возвращает ненулевое значение.
Функция
ftell(имя указателя на файл)[;]
определяет текущую позицию файлового указателя. Она возвращает величину смещения (в байтах) относительно начала файла.