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

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

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(имя указателя на файл)[;]

определяет текущую позицию файлового указателя. Она возвращает величину смещения (в байтах) относительно начала файла.