Você está na página 1de 24

21

Chng 3 : Nhp v xut d liu



1. Khi nim chung

1. Khi nim :Trc y chng ta xt vic nhp d liu t bn phm. Trong nhiu trng
hp thc t , thun li , chng ta phi nhp d liu t cc tp tin trn a . Cc hm th
vin ca C cho php truy cp tp tin v chia l 2 cp khc nhau :
- cc hm cp 1 l cc hm cp thp nht , truy cp trc tip n cc tp tin trn
a.C khng cung cp vng nh m cho cc hm ny
- cc hm cp 2 l cc hm truy xut tp tin cao hn , do chng c C cung cp
vng nh m
i vi cc hm cp 1 , tp tin c xem l khi cc byte lin tc do khi mun
truy cp mu tin c th th phi tnh ton a ch ca mu tin v nh vy cng vic vt v
hn . Ngoi ra phi cung cp vng nh m cho kiu c ghi ny. i vi cc hm cp hai
cng vic nh nhng hn do :
- trnh bin dch t ng cung cp vng k c m cho chng
- c th truy xut cc mu tin m khng gp kh khn nh vi cc hm cp 1
Trong C , cc thng tin cn thit cho cc hm xut nhp cp 2 c t trong tp tin
stdio.h cn cc thng tin v hm nhp xut cp 1 th trong tp tin io.h

2. Stream v cc tp tin : Ta phi phn bit hai thut ng l stream v file .H thng xut
nhp ca C cung cp mt khng gian tng tng gia ngi lp trnh v cc thit b c
dng . Cp trung gian tng tng ny gi l stream v thit b c th l tp tin .
a. Cc streams : Trong my tnh ta dng 2 loi stream : vn bn v nh phn . Mt
stream vn bn l mt lot k t c t chc thnh dng m mi dng c kt thc bng
k t xung dng newline(\n) . Khi ghi , mt k t chuyn dng LF(m 10) c chuyn
thnh 2 k t CR( m 13) v LF . Khi c 2 k t lin tip CR v LF trn tp tin ch cho ta
mt k t LF .
Mt stream nh phn l mt lot cc byte .
a. Cc tp tin : Trong C ,mt tp tin l mt khi nim logic m h thng c th p
dng cho mi th t cc tp tin trn a cho n cc terminal . Khi bt u thc hin
chng trnh , my tnh m 3 stream vn bn c nh ngha trc l stdin , stdout v
stderr . i vi hu ht cc h thng , cc thit b ny l console

2. Nhp xut chun

1. Nhp xut k t , chui k t , nh dng v bn ghi : Nhp xut cp 2(nhp xut chun
) cung cp 4 cch c v ghi d liu khc nhau (ngc li nhp xut cp1 ch dng 1 trong 4
cch ny) .
Trc ht d liu c th c ghi mi ln mt k t , tng t nh cch lm vic ca
putchar() v getche() c d liu t bn phm v hin th ln mn hnh .
Th hai , d liu c th nhp xut theo chui bng cc dng cc hm gets() v puts()
Th ba , d liu c th c nhp v xut theo khun dng bng cc hm fprintf() v
fscanf()
Th t , d liu c c v ghi theo khi c chiu di c nh thng dng lu tr
mng hay cu trc bng cc hm fread() v fwrite() . Tm li :
Cc hm dng chung cho hai kiu nh phn v vn bn
fopen : dng m tp tin

22
fclose : ng tp tin
fclose : ng tt c cc tp tin
fflush : dng lm sch vng m ca tp tin
flushall : dng lm sch vng m ca tt c tp tin
ferror : cho bit c li (khc khng) hay khng c li ( bng 0)
perror : thong bo li trn mn hnh
foef : cho bit cui tp tin hay cha
unlink v remove : dng loi tp tin trn a
fseek : di chuyn con tr n v tr bt k trn tp tin
ftell : cho bit v tr hin ti ca con tr
Cc hm nhp xut k t
putc v fputc : nhp k t vo tp tin
getc v fgetc : c k t t tp tin
fprintf : dng ghi d liu nh dng ln tp tin
fscanf : dng c d liu nh dng t tp tin
fputs : dng ghi chui ln tp tin
fgets : dng c chui t tp tin
Cc hm dng cho kiu xut nhp nh phn
putw : dng ghi mt s nguyn hai byte ln tp tin
gets : dng c mt s nguyn hai byte t tp tin
fwrite : dng ghi mt mu tin ln tp tin
fread : dng c mt mu tin t tp tin

2.Dng vn bn v dng nh phn : Cch khc phn loi cc thao tc nhp xut tp tin
l n c m theo kiu vn bn hay nh phn . im khc bit gia hai loi ny l k t
newline v end of line . im th hai phn bit hai kiu tp tin l l cch lu tr cc s
vo a . i vi dng vn bn th cc s c lu tr thnh chui cc k t cn dng nh
phn th cc s c lu nh trong b nh , ngha l dng hai byte cho mt s nguyn v 4
byte cho mt s float .

3. Nhp xut chun : Chng trnh dng cc hm nhp xut cp 2 thng d hiu hn nn
chng ta s nghin cu trc .
a. Nhp xut k t : nhp k t vo tp tin ta dng hm putc() hay fputc(). c
k t t tp tin ta dng hm getc() hay fgetc() . Chng trnh v d ny l to lp cc k t
bng cch g vo bn phm mi ln mt k t v ghi vo mt tp tin trn a . Chng trnh
dng hm fopen() m mt tp tin , dng hm putc() ghi ln tp tin , dng k t enter
kt thc chng trnh .
Chng trnh 3-1 :
#include <stdio.h>
#include <conio.h>
void main()
{
FILE *fp;
char ch;
printf(Nhap cac ki tu : );
fp=fopen("textfile","w");
while ((ch=getche())!='\r')
putc(ch,fp);
fclose(fp);
}

23
b. M mt tp tin : Trc khi ghi mt tp tin ln a ta phi m tp tin . m
tp tin , trc ht ta phi khai bo mt con tr ch ti FILE . FILE l mt structure cha
ng cc thng tin v cu trc ca tp tin v d nh kch thc , v tr ca b m d liu
hin hnh . Cu trc FILE c khai bo trong stdio.h nn ta cn include tp tin ny . Ngoi
ra stdio.h cn xc nh cc tn v cc bin khc c dng trong chng trnh hng n
cc tp tin . Do vy trong chng trnh ta c cu lnh :
FILE *fp ;
Sau ta m tp tin bng lnh :
fopen(textfile,w);
Khi vit nh vy s lm cho h iu hnh bit l m mt tp tin tn l textfile trong th mc
hin hnh vit ln tp tin (nh w) . Ta c th cho tn ng dn y nu mun
m tp tin th mc bt k . Hm fopen() tr v mt con tr ch n cu trc FILE cho tp
tin v con tr ny c ct gi trong bin fp . Chui w c gi l kiu , n c ngha l
ghi ln tp tin . Cc kiu m tp tin l :
r,rt m c , tp tin phi c trn a
w,wt m ghi , nu trn a c tp tin th ni dung b ghi , nu cha c
th tp tin c to lp
a,at m ni thm, thng tin c ghi vo cui tp tin c nu c tp tin
hay to mi tp tin
r+,r+t m va c v ghi , tp tin phi c trn a
rb m mt tp tin c theo kiu nh phn . Tp tin phi c sn trn a
r+b m mt tp tin c theo kiu nh phn . Tp tin phi c sn trn a
w+,w+t m va c v ghi , ni dung tp tin c trn a s b ghi ln
wb m ghi theo kiu nh phn , nu trn a c tp tin th ni dung b ghi
, nu cha c th tp tin c to lp
a+,a+t m c v ni thm , nu tp tin cha c th n s c to ra
ab m c v ni thm theo kiu nh phn , nu tp tin cha c th n s c
to ra
c. Ghi ln tp tin : Khi tp tin c m , ta c th ghi ln tp tin tng k t mt
bng cch dng hm :
putc(ch,fp)
Hm putc() tng t cc hm putch() v putchar() . Hm putc() ghi ln tp tin c cu trc
FILE c n nh bi bin fp nhn c khi m tp tin . Tin trnh ghi c tin hnh cho
n khi nhn enter .
d. ng tp tin : Khi khng c ghi na ta cn ng tp tin . Cu lnh ng tp tin l
:
fclose(fp);
Ta bo cho h thng bit l cn ng tp tin ch bi fp .
e. c tp tin : Nu ta c th ghi ln tp tin th ta cng c th c t tp tin . Ta c v
d sau :
Chng trnh 3-2 :
#include <stdio.h>
#include <conio.h>
main()
{
FILE *fp;
int ch;
clrscr();
fp=fopen("textfile","r");
while ((ch=getc(fp))!=EOF)

24
printf("%c",ch);
fclose(fp);
getch();
}

f. Kt thc tp tin : S khc nhu ch yu gia chng trnh c v ghi l chng
trnh c phi phn bit c u l k t EOF . N khng phi l mt k t m l mt s
nguyn do h iu hnh gi ti . Khi ht tp tin ta gp m kt thc tp tin EOF (nh ngha
trong stdio.h bng -1 ) v hm foef() cho tr khc khng . Ngi ta chn -1 lm m kt thc
v nu cha gp cui tp tin th s c c mt byte m m s nm trong khong 0-255 .
Nh vy gi tr -1 khng trng vi bt k k t no no c c t tp tin . Trong khi
chng trnh ang c v hin th cc k t th n tm kim m gi tr -1 hay EOF . Khi thy
gi tr ny , chng trnh s kt thc . Chng ta dng mt bin nguyn ct gi mt k t c
c , do ta c th hiu du EOF nh l mt tr nguyn c tr l -1 . Nu dng mt bin
kiu char , chg ta c th dng tt c cc k t t 0..255 - l t hp 8 bit . Do nu dng
bin nguyn , ta bo m rng ch c mt gi tr 16 bit l -1 , l du EOF .
g. S phin phc khi m tp tin : Hai chng trnh ta trnh by trn c mt li tim
n . Nu tp tin c ch nh khng m c th chng trnh khng chy . Li ny c
th l do tp tin cha c (khi c) hay a khng cn ch(khi ghi). Do vn l phi
kim tra xem tp tin c m c hay khng , nu tp tin khng m c th hm fopen() tr
v tr 0(0 l NULL trong stdio.h) . Khi ny C coi y khng phi l a ch hp l . Nh vy
ta vit li chng trnh trn nh sau
Chng trnh 3-3 :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
FILE *fp;
int ch;
clrscr();
if ((fp=fopen("file","r"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while ((ch=getc(fp))!=EOF)
printf("%c",ch);
fclose(fp);
}

h. m s k t : Kh nng c v ghi tp tin trn c s cc k t cho php trin khai
mt s ng dng . Chng ta xem xt chng trnh m s k t sau :
Chng trnh 3-4 :
#include <stdio.h>
#include <conio.h>
main(int argc,char *argv)
{
FILE *fp;

25
char string[8];
int count = 0;
clrscr();
if (argc!=2)
{
printf("Format c:\<ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((fp=fopen(argv[1],"r"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while (getc(fp)!=EOF)
count++;
fclose(fp);
printf("Tap tin %s co %d ki tu",argv[1],count);
getch();
}

i. m s t : Ta c th sa chng trnh trn thnh chng trnh m s t .
Chng trnh 3-5 :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(int argc,char *argv[])
{
FILE *fp;
char ch,string[81];
int count = 0;
int white=1;
clrscr();
if (argc!=2)
{
printf(" Format c:\<Ten chuong trinh> <tentaptin>\n");
getch();
exit(1);
}
if ((fp=fopen(argv[1],"r"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while ((ch=getc(fp))!=EOF)
switch(ch)
{
case ' ': /*nu c du trng , dng mi hay tab*/

26
case '\t':
case '\n': white++;
break;
default:if(white)
{
white=0;
count++;
}
}
fclose(fp);
printf("Tap tin %s co %d tu",argv[1],count);
getch();
return 0;
}

k.Vo ra chui : c hay ghi chui trn tp tin cng tng t nh c hay ghi tng
k t ring l . Ta xt mt chng trnh ghi chui
Chng trnh 3-6 :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
FILE *fp;
char string[8];
clrscr();
if ((fp=fopen("a.txt","w"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while (strlen(gets(string))>0)
{
fputs(string,fp);
fputs("\n",fp);
}
fclose(fp);
}
Trong chng trnh mi chui kt thc bng cch g enter v kt thc chng trnh
bng cch g enter u dng mi . Do fputs() khng t ng thm vo m kt thc
chuyn dng mi nn ta phi thm vo tp tin m ny . Chng trnh c mt chui t tp
tin :
Chng trnh 3-7 :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
void main()

27
{
FILE *fp;
char string[81];
clrscr();
if ((fp=fopen("a.txt","r"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while (fgets(string,81,fp)!=NULL)
printf("%s",string);
fclose(fp);
getch();
}

Hm fgets() nhn 3 i s : a ch ni t chui , chiu di ti a ca chui , v con
tr ch ti tp tin .
l. Vn sang dng mi : Trong chng trnh m k t ta thy s k t m c
bao gi cng nh hn s byte c trong tp tin ny nhn c bng lnh dir ca DOS . Khi ta
ghi mt tp tin vn bn vo a , C t ng ghi vo a c hai m CR v LF khi gp m sang
dng mi \n . Ngc li khi c tp tin t a , cc m CR v LF c t hp thnh m
sang dng mi . Chng trnh sau minh hoa thm v k thut vo ra chui , ni dung tng
t lnh type ca DOS
Chng trnh 3-8 :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(int argc,char *argv[])
{
FILE *fp;
char string[81];
clrscr();
if (argc!=2)
{
printf("Format c:\<ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((fp=fopen(argv[1],"r"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while (fgets(string,81,fp)!=NULL)
printf("%s",string);
fclose(fp);
getch();
return 0;

28
}

m. Cc tp tin chun v my in : Trn y ta ni n cch thc tip nhn mt con
tr tham chiu dn mt tp tin trn a ca hm fopen() , C nh ngha li t chun ca 5 tp
tin chun nh sau :

Tn Thit b
in Thit b vo chun (bn phm)
out Thit b ra chun (mn hnh)
err Thit b li chun (mn hnh)
aux Thit b ph tr chun(cng ni tip)
prn Thit b in chun (my in)

Ta c th dng cc tn ny truy cp n cc thit b . Chng trnh sau dng hm fgets(0
v fputs() in ni dung mt tp tin ra my in
Chng trnh 3-9 :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(int argc,char *argv[])
{
FILE *fp1,*fp2;
char string[81];
clrscr();
if (argc!=2)
{
printf("Format c:\<ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((fp1=fopen(argv[1],"r"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
if ((fp2=fopen("prn","w"))==NULL)
{
printf("Khong mo duoc may in\n");
getch();
exit(1);
}
while (fgets(string,81,fp1)!=NULL)
fputs(string,fp2);
fclose(fp1);
fclose(fp2);
getch();
return 0;
}
Trong chng trnh trn my in c coi l tp tin c tn l prn

29
n. Nhp xut nh dng : Trc y ta cp n nhp xut k t . Nhng s c
nh dng cng c th ghi ln a nh cc k t . Ta xt chng trnh sau
Chng trnh 3-10 :
#include <stdio.h>
#include <conio.h>
main()
{
FILE *p;
int i,n;
float x[4],y[4];
clrscr();
p=fopen("test.txt","w");
printf("Cho so cap so can nhap n = ");
scanf("%d",&n);
fprintf(p,"%d\n",n);
printf("Cho cac gia tri x va y\n");
for (i=0;i<n;i++)
{
scanf("%f%f",&x[i],&y[i]);
fprintf(p,"%f %f\n",x[i],y[i]);
}
fclose(p);
}

#include <stdio.h>
#include<conio.h>
#include <string.h>
void main()
{
FILE *fp;
char name[40];
int code;
float height;
int n,i;
clrscr();
fp=fopen("b.txt","w");
printf("Cho so nguoi can nhap : ");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("Nhap ten , ma so va chieu cao : ");
scanf("%s%d%f",name,&code,&height);
fprintf(fp,"%s %d %f",name,code,height);
}
fclose(fp);
}

Chng trnh 3-11 :
#include <stdio.h>
#include <conio.h>

30
void main()
{
FILE *p;
int i,n;
float x[4],y[4];
clrscr();
p=fopen("test.txt","r");
fscanf(p,"%d",&n);
for (i=0;i<n;i++)
{
fscanf(p,"%f%f",&x[i],&y[i]);
printf("\n%.3f%8.3f",x[i],y[i]);
}
fclose(p);
getch();
}


#include <stdio.h>
#include<conio.h>
#include <string.h>
void main()
{
FILE *fp;
char name[2];
int code,n,i;
float height;
clrscr();
fp=fopen("b.txt","r");
fscanf(fp,"%d",&n);
for (i=0;i<n;i++)
{
fscanf(fp,"%s%d%f\n",name,&code,&height);
printf("%s%3d%8.3f\n",name,code,height);
}
fclose(fp);
getch();
}

3. Kiu nh phn v kiu vn bn

1. M sang dng theo hai kiu : Trong dng vn bn , mt k t chuyn dng tng ng
vi 2 m CR v LF khi ghi vo tp tin trn a . Ngc li khi c , t hp CR/LF trn a
tng ng vi k t sang dng mi . Tuy nhin nu m tp tin theo kiu nh phn th 2 m
CR v LF l phn bit nhau . T s k t m chng trnh m c khc vi trng hp
m tp tin bng kiu vn bn
Chng trnh 3-12 : Chng trnh m s k t bng cch m tp tin theo kiu nh phn
#include <stdio.h>
#include <stdlib.h>

31
#include <conio.h>
void main(int argc,char *argv[])
{
FILE *fp;
char string[81];
int count=0;
clrscr();
if (argc!=2)
{
printf("Format c:\<ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((fp=fopen(argv[1],"rb"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
while (getc(fp)!=EOF)
count++;
fclose(fp);
printf("Tap tin %s co %d ki tu",argv[1],count);
getch();
}

2. M kt thc tp tin theo 2 kiu : S khc bit th hai khi m tp tin theo kiu nh phn
hay kiu k t cn l ch nhn nhn k t kt thc tp tin . Ni chung cc tp tin u c
qun l theo kch thc ca n v khi c ht s byte ch ra trong kch thc tp tin th
du hiu EOF s c thng bo , du hiu ng vi m 1Ah(hay 26 h 10) . Khi ng
tp tin vn bn , m 1A s c t ng chn vo cui tp tin lm du hiu kt thc tp
tin (tng ng m Ctrl-Z) . Do vy nu bng ch no ta chn m 1A vo mt v tr gia
tp tin , th khi m tp tin theo kiu vn bn v c n m ny chng trnh c s ngng
hn v chnh lc hm c pht sinh gi tr -1 bo cho chng trnh l kt thc tp
tin . Nu lu s vo tp tin theo dng nh phn th khi m tp tin cn phi m theo dng
nh phn . Nu khng s c mt s no l 1A v vic c tp tin theo kiu vn bn s kt
thc ngoi nh . Tng t , vi tp tin m theo kiu nh phn m 10 khng c nhn
nhn l m sang dng mi v khng c xem l tng ng vi t hp CR/LF na.

3. Chng trnh minh ho : Chng ta xt mt chng trnh dng kiu nh phn kho st
tp tin .
Chng trnh 3-13 :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define length 10
#define true 0
#define false -1
void main(int agrc,char *argv[])
{

32
FILE *fp;
int ch;
int j,noteof;
unsigned char string[length+1];
clrscr();
if (agrc!=2)
{
printf("Dang c:\<ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((fp=fopen(argv[1],"rb"))==NULL)
{
printf("Khong mo duoc tap tin\n");
getch();
exit(1);
}
noteof=true;
do
{
for (j=0;j<length;j++)
{
if ((ch=getc(fp))==EOF)
noteof=false;
printf("%3x",ch);
if (ch>31)
*(string+j)=ch;/* ki tu in duoc*/
else
*(string+j)='.';/* ki tu khong in duoc*/
}
*(string+j)='\0';
printf(" %s\n",string);
}
while (noteof==true);
fclose(fp);
getch();
}

4. Cc hm fread v fwrite :
a. Ghi cu trc bng fwrite : Ta xt mt chng trnh ghi cu trc ln a . Trong
chng trnh ta dng hm fread() . Hm ny c 4 i s : a ch ghi cu trc , kch thc
ca cu trc , s cu trc s ghi v con tr ch ti tp tin .
Chng trnh 3-14 :
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
char chso[10];
FILE *fp;

33
struct nguoi {
char ten[30];
int so;
float cao;
}nv;
clrscr();
if((fp=fopen("nhanvien.rec","wb"))==NULL)
{
printf("Khong mo duoc file\n");
getch();
exit(1);
}
do
{
printf("\nCho ten : ");
gets(nv.ten);
printf("Cho ma so : ");
gets(chso);
nv.so=atoi(chso);
printf("Cho chieu cao :");
gets(chso);
nv.cao=atof(chso);
fwrite(&nv,sizeof(nv),1,fp);
printf("Tiep tuc khong y/n?");
}
while(getch()=='y');
fclose(fp);
}
b. c cu trc bng fread : Ta dng hm fread() c cu trc ghi trn mt tp
tin . Cc i s ca fread() cng ging nh fwrite() . Hm fread() tr v s ca nhng mc
c c ti . Nu tp tin kt thc n cho tr m . Ta xt v d sau :
Chng trnh 3-15 :
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
FILE *fp;
struct nguoi {
char ten[30];
int so;
float cao;
}nv;
clrscr();
if((fp=fopen("nhanvien.rec","rb"))==NULL)
{
printf("Khong mo duoc file\n");
getch();
exit(1);
}

34
do
{
printf("\nTen :%s\n",nv.ten);
printf("Ma so :%03d\n",nv.so);
printf("Chieu cao :%.2f\n",nv.cao);

}
while (fread(&nv,sizeof(nv),1,fp)==1);
fclose(fp);
getch();
}

c. Ghi mng bng fwrite() : Hm fwrite() cng dng ghi mng ln a . Ta xt v d
sau :
Chng trnh 3-16 :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int table[10]={1,2,3,4,5,6,7,8,9,10};
void main()
{

FILE *fp;
clrscr();
if((fp=fopen("table.rec","wb"))==NULL)
{
printf("Khong mo duoc file\n");
getch();
exit(1);
}
fwrite(table,sizeof(table),1,fp);
fclose(fp);
}

d. c mng bng fread() : Sau khi ghi mng ln a ta c th c cc phn t ca
mng t a bng hm fread().
Chng trnh 3-17 :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void main()
{

FILE *fp;
int a[10];
int i;
clrscr();
if((fp=fopen("table.rec","rb"))==NULL)
{

35
printf("Khong mo duoc file\n");
getch();
exit(1);
}
for (i=0;i<10;i++)
{
fread(a,sizeof(a),10,fp);
printf("\%3d",a[i]);
}
fclose(fp);
getch();
}

e. V d v c s d liu : Ta xt chng trnh qun l nhn vin vi cc tp tin trn
a nh sau :
Chng trnh 3-18 :
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define true 1
struct nguoi {
char ten[30];
int so;
float cao;
};
struct nguoi nv[10];
int n=0;
char numstr[10];

void main()
{
char ch;
void newname(void);
void listall(void);
void wfile(void);
void rfile(void);
clrscr();
while (true)
{
printf("\nGo 'e' de nhap nhan vien moi\n");
printf("Go 'l'de liet ke nhan vien\n");
printf("Go 'w' de ghi len dia\n");
printf("Go 'r'de doc file tu dia\n");
printf("Go 'q' de ket thuc chuong trinh\n\n");
ch=getch();
switch (ch)
{
case 'e':newname();
break;
case 'l':listall();

36
break;
case 'w':wfile();
break;
case 'r':rfile();
break;
case 'q': exit(1);
default : printf("Nhap sai ki tu , chon lai!");
}
}
}

void newname()
{
char numstr[81];
printf("\nBan ghi so %d\nCho ten : ",n+1);
gets(nv[n].ten);
printf("Cho ma so co 3 chu so : ");
gets(numstr);
nv[n].so=atoi(numstr);
printf("Cho chieu cao :");
gets(numstr);
nv[n++].cao=atof(numstr);
}
void listall()
{
int j;
if (n<1)
printf("Danh sach rong\n");
for (j=0;j<n;j++)
{
printf("\nBan ghi so %d\n",j+1);
printf("Ten :%s\n",nv[j].ten);
printf("Ma nhan vien : %3d\n",nv[j].so);
printf("Chieu cao :%4.2f\n",nv[j].cao);
}
}

void wfile()
{
FILE *fp;
if (n<1)
{
printf("Danh sach rong , khong ghi\n");
getch();
exit(1);
}
if ((fp=fopen("nv.rec","wb"))==NULL)
{
printf("Khong mo duoc file\n");
getch();

37
exit(1);
}
else
{
fwrite(nv,sizeof(nv[0]),n,fp);
fclose(fp);
printf("Da ghi %3d ban ghi len dia\n",n);
}
}

void rfile()
{
FILE *fp;
if ((fp=fopen("nv.rec","rb"))==NULL)
{
printf("Khong mo duoc file\n");
getch();
exit(1);
}
else
{
while(fread(&nv[n],sizeof(nv[n]),1,fp)==1)
{
clrscr();
printf("Ban ghi so %3d\n",n+1);
printf("Ten nhan vien :%s\n",nv[n].ten);
printf("Ma nhan vien :%3d\n",nv[n].so);
printf("Chieu cao cua nhan vien :%.2f\n",nv[n].cao);
getch();
n++;
}
fclose(fp);
printf("Xong ! Tong so ban ghi da doc %3d\n",n);
}
}

4. Cc file ngu nhin

Cc tp tin cp trc y l cc tp tin tun t , ngha l tp tin m khi c hay ghi
theo ch tun t t u n cui tp tin . i vi tp tin tun t ta khng th c hay
ghi mt cch trc tip ti mt v tr bt k trn tp tin . Tp tin ngu nhin cho php ta truy
cp ngu nhin vo nhng v tr cn thit trn tp tin . Cc hm dng khi truy cp tp tin
ngu nhin l :
rewind() : di chuyn con tr tp tin v u tp tin
C php : void rewind(FILE *fp);
fseek() : di chuyn con tr tp tin v v tr mong mun
C php : int fseek(FILE *fp , long sb , int xp)
fp - con tr tp tin
sb - s byte cn di chuyn

38
xp - v tr xut pht m vic dch chuyn c bt u t . xp c th c cc
gi tr sau :
xp=SEEK_SET hay 0 : xut pht t u tp tin
xp=SEEK_CUR hay 1 : xut pht t v tr con tr hin ti
xp=SEEK_END hay 2 : xut pht t cui tp tin
ftell() : cho bit v tr hin ti ca con tr tp tin
Ta xt chng trnh v d sau :
Chng trnh 3-19 :
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
struct nguoi {
char ten[30];
int so;
float cao;
}nv;
int recno;
FILE *fp;
long int offset;
clrscr();
if ((fp=fopen("nhanvien.rec","r"))==NULL)
{
printf("Khong mo duoc file\n");
getch();
exit(1);
}
printf("Ban muon doc ban ghi thu may : ");
scanf("%d",&recno);
recno--;
offset=recno*sizeof(nv);
if (fseek(fp,offset,0)!=0)
{
printf("Khong di chuyen duoc con tro file toi do\n");
getch();
exit(1);
}
fread(&nv,sizeof(nv),1,fp);
printf("Ten :%s\n",nv.ten);
printf("Ma nhan vien : %3d\n",nv.so);
printf("Chieu cao :%4.2f\n",nv.cao);
getch();
}

5. Li vo ra

Ni chung , khi m tp tin thnh cng ta c th ghi ln n . Tuy nhin , nhiu trng
hp khng m c tp tin nhng ta khng bit li do u . xc nh lli ta dng hm

39
ferror() . Hm ny c i s l con tr tp tin . Hm s c gi tr khng nu khng c li g .
Ngc li hm cho gi tr khc khng . Ta cng c th dng hm perror() ch ni dung
li .
Chng trnh 3-20 :
#include <stdio.h>
#include<conio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
FILE *fp;
char name[40],numstr[10];
int code;
float height;
int n,i;
clrscr();
fp=fopen("a:\newfile.txt","w");
printf("Cho so nguoi can nhap : ");
gets(numstr);
n=atoi(numstr);
for (i=0;i<n;i++)
{
printf("Nhap ten : ");
gets(name);
printf("Nhap ma so : ");
gets(numstr);
code=atoi(numstr);
printf("Nhap chieu cao : ");
gets(numstr);
height=atof(numstr);
fprintf(fp,"%s %d %f",name,code,height);
if (ferror(fp))
{
perror("Loi ghi file ");
getch();
exit(1);
}
}
fclose(fp);
}
Sau li do ta ghi , trnh bin dch s thng bo li c th trong cu Loi ghi file : no
such file directory

6. Vo ra mc h thng

1.Cc tp tin tiu v bin chun : Trong cch vo ra mc h thng , ta phi khi to
b m ri t d liu vo trc ghi hay c . Vo ra mc h thng c li ch lng
m t hn vo ra chun v tc s nhanh hn . dng cc hm cp 1 ta phi cn cc tp
tin tiu sau :

40
io.h - cha cc prototype ca cc hm cp 1
fcntl.h - cha cc nh ngha quyn truy cp
sys/stat.h - ch cc nh ngha thuc tnh
d.h - cha cc thuc tnh theo DOS
2. Tm tt cc hm : creat - to tp tin mi
_creat - to tp tin mi theo kiu nh phn
open - m tp tin
_open - m tp tin tn ti
close v _close - ng tp tin
chmod - thay i thuc tnh ca tp tin
_chmode - thay i thuc tnh ca tp tin theo kiu DOS
perror - thng bo li (stdlib.h)
write - ghi mt dy cc byte
read - c mt dy cc byte
lseek - dng di chuyn con tr v tr
3. c tp tin theo cch vo ra h thng : Ta c chng trnh c tp tin t a v hin th
ln mn hnh theo cch vo ra h thng .
Chng trnh 3-21 :
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#define BUFFSIZE 512
char buff[BUFFSIZE];
void main(int argc,char *argv[])
{
int inhandle,bytes,i;
clrscr();
if (argc!=2)
{
printf("Dang <ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((inhandle=open(argv[1],O_RDONLY|O_BINARY))<0)
{
printf("Khong mo duoc file\n");
getch();
exit(1);
}
while ((bytes=read(inhandle,buff,BUFFSIZE))>0)
for (i=0;i<bytes;i++)
putch(buff[i]);
close(inhandle);
}

4. Khi to b m : Trong chng trnh ta phi nh ngha b m bng pht biu
#define BUFFSIZE 512
char buff[BUFFSIZE]

41
Nh ta c c d liu t a vo b m buff . Vi DOS , kch thc b m nn chn
l bi s ca 512.
5. M mt tp tin : Cng ging nh vo ra bng hm cp 2 , ta phi m tp tin trc khi
c hay ghi bng pht biu :
inhandle=open(argv[1],O_RDONLY | O_BINARY);
Biu thc ny thit lp s lin lc gia tp tin v h iu hnh . Trong biu thc ta cn mt
hng lag oflag l du hiu cho bit mc dng tp tin .

oflag ngha
O_APPEND t con tr cui tp tin
O_CREAT To tp tin mi ghi(khng c hiu qu nu tp tin c )
O_RDONLY M mt tp tin ch c
O_RDWR M mt tp tin ch c hay ghi
O_TRUNC M v ct b bt tp tin
O_WRONLY M tp tin ghi
O_BINARY M tp tin kiu nh phn
O_TEXT M tp tin kiu vn bn

6. Danh s ca tp tin : Trong vo ra chun , con tr tp tin s nhn c ngay khi gi hm
fopen() cn trong nhp xut bng hm cp 1 ta nh c gi tr nguyn gi l danh s ca
tp tin . y l s gn cho mt tp tin c th tham chiu n tp tin ny . Nu hm open()
cho ta gi tr -1 ngha l danh s khng ng v pht sinh li .
7. c tp tin vo b m : c tp tin vo b m ta dng lnh :
byte = read(inhandle , buff , BUFSIZE);
Hm ny c 3 i s : danh s ca tp tin , a ch ca b m v s byte cc i cn c .
Gi tr ca hm read() ch ra s byte c c .
8. ng tp tin : ng tp tin ta dng lnh
close(inhandle);
9. Thng bo li : Khi hm open() cho gi tr -1 , ngha l c li . Dng li s c c
bng perror() . Ta c chng trnh v d
Chng trnh 3-22 :
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#define BUFFSIZE 512
char buff[BUFFSIZE];
void main(int argc,char *argv[])
{
int inhandle,bytes,i;
clrscr();
if (argc!=2)
{
printf("Dang <ten chuong trinh> <ten tap tin>");
getch();
exit(1);
}
if ((inhandle=open(argv[1],O_RDONLY|O_BINARY))<0)

42
{
perror("Khong mo duoc file\n");
getch();
exit(1);
}
while ((bytes=read(inhandle,buff,BUFFSIZE))>0)
for (i=0;i<bytes;i++)
putch(buff[i]);
close(inhandle);
}

10. Thao tc trn b m : Vic a tp tin vo b m c li l cho php truy cp trn b
m thay v trn tp tin . Lm nh vy nhanh hn truy cp trn a .
Chng trnh sau cho php tm mt t trong mt tp tin vn bn .
Chng trnh 3-23 :
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <io.h>
#define BUFFSIZE 1024
char buff[BUFFSIZE];

void main(int argc,char *argv[])
{
int inhandle,bytes;
void search(char *,int);
clrscr();
if (argc!=3)
{
printf("Dang <ten chuong trinh> <ten tap tin> <tu can tim>");
getch();
exit(1);
}
if ((inhandle=open(argv[1],O_TEXT))<0)
{
printf("Khong mo duoc file %s\n",argv[1]);
getch();
exit(1);
}
while ((bytes=read(inhandle,buff,BUFFSIZE))>0)
search(argv[2],bytes);
close(inhandle);
printf("Khong tim thay");
getch();
}

void search(char *cau,int buflen)
{

43
char *p,*ptr;
ptr=buff;
while ((ptr=memchr(ptr,cau[0],buflen))!=NULL)
if (memcmp(ptr,cau,strlen(cau))==0)
{
printf("Tu xuat hien lan dau trong cau tai vi tri %d:\n",ptr-buff+1);
for (p=ptr;p<ptr+strlen(cau);p++)
putch(*p);
exit(1);
}
else
ptr++;
}

11. Hm dng b m : Hm search() l chng trnh con minh ho cch dng b m . Ta
c mt hm memchr() dng :
ptr = memchr(ptr , cau[0] , buflen);
Hm ny dng tm v tr ca k t cau[0] trong chui ch bi ptr v f\di ca phn cn
tm trong b m l buflen . Chng trnh s truyn argv[2] cho cau . Hm ny cho gi tr
NULL khi khng tm thy k t cn tm . Ngc li n s cho a ch ca k t tm thy
trong b m . Vic so snh cc chui cau v chui ptr c tin hnh nh hm memcmp
trong cu lnh :
if ((memcmp(ptr,cau,strlen(cau))==0)
Hm ny cng c 3 i s l : chui thu nht ptr , chui thu hai cau v o dai can so sanh
strlen(cau)
12. Ghi ln tp tin : Ghi thng tin ln tp tin phc tp hn c t tp tin . Ta c chng
trnh v d sau dng chp t mt tp tin ny sang tp tin khc.
Chng trnh 3-24 :
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <sys\stat.h>
#define BUFFSIZE 4096
char buff[BUFFSIZE];

void main(int argc,char *argv[])
{
int inhandle,outhandle,bytes;

clrscr();
if (argc!=3)
{
printf("Dang <ten chuong trinh> <ten tap tin 1> <ten tap tin 2>");
getch();
exit(1);
}
if ((inhandle=open(argv[1],O_RDWR|O_BINARY))<0)
{

44
printf("Khong mo duoc file %s\n",argv[1]);
getch();
exit(1);
}
if ((outhandle=open(argv[2],O_CREAT|O_WRONLY|O_BINARY,S_IWRITE))<0)
{
printf("Khong mo duoc file %s\n",argv[2]);
getch();
exit(1);
}
while ((bytes=read(inhandle,buff,BUFFSIZE))>0)
write(outhandle,buff,bytes);
close(inhandle);
close(outhandle);
printf("Da chep xong");
getch();
}

Trong v d trn ta m mt lc 2 tp tin vi danh s l inhamdle v outhandle Biu
thc m tp tin ngun khng c g c bit cn biu thc m tp tin ch c dng :
outhandle = open(argv[2] ,O_CREAT | O_WRONLY | O_BINARY , S_IWRITE)
vi O_CREAT to tp tin trn a
O_WRONLY ch ghi ln tp tin
O_BINARY m tp tin theo kiu nh phn
Khi m tp tin vi O_CREAT , i th 3 ca open() l mt trong 3 tr :
S_IWRITE : ch cho php ghi ln tp tin
S_IREAD : ch cho php c t tp tin
S_IWRITE | S_IREAD : cho php c v ghi ln tp tin
dng cc tr ny phi khai bo #include <sys\stat.h> sau khai bo
#include<fcntl.h> . Hm write() c i tng t nh read() . Trong vng lp while hm
read() bo s byte c c qua bin bytes v hm write() s bit s bytes cn ghi vo tp
tin ch . Trong chng trnh ta dng b m vi kch thc kh ln chng trnh chy
nhanh .

Você também pode gostar