CHNG3:NHPVÀXUTDLIU
§1.KHÁINIMCHUNG
1.Kháinim: Trcđâychúngtađãxétvicnhpdliutbànphím.
Trongnhiutrnghpthct,đthunli,chúngtaphinhpdliu
t
cáctptintrênđĩa.CáchàmthvincaCchophéptruycptptinvà
chialà2cpkhácnhau:
cáchàmcp1làcáchàmcpthpnht,truycptrc
tipđncác
tptintrênđĩa.Ckhôngcungcpvùngnhđmchocáchàmnày
cáchàmcp2làcáchàmtruyxuttptincaohn,dochúngđcC
cungcpvùngnhđm.
Đi
vicáchàmcp1,tptinđcxemlàkhicácbyteliêntcdođó
khimuntruycpmutincththìphitínhtoánđachcamutinvà
nhvycôngvi
cvtvhn.Ngoàiraphicungcpvùngnhđmcho
kiuđcghinày.Đivicáchàmcphaicôngvicnhnhànghndo:
trìnhbiêndchtđngcungcpvùngkíc
đmchochúng
cóth truy xut các mutinmàkhônggpkhókhănnhvicác
hàmcp1
TrongC,cácthôngtincnthitchocáchàmxutnhpcp2đcđt
trongt
ptinstdio.hcòncácthôngtinvhàmnhpxutcp1thìtrong
tptinio.h
2.Streamvàcáctptin:Taphiphânbithaithutnglàstreamvàfile.
H thng xut nh
p ca C cung cp mt không gian tng tng gia
ngilptrìnhvàcácthitbđcdùng.Cptrunggiantngtngnày
gilàstreamvàthitbcthlàtp
tin.
a.Cácstreams:Trongmáytínhtadùng2loistream:vănbnvành
phân.Mtstreamvănbnlàmtlotkít đctchcthànhdòngmà
midòngđcktthúcbngkítxungdòngnewline(“\n”).Khighi,mt
kítchuyndòngLF(mã10)đcchuynthành2kítCR(mã13)vàLF.
Khiđc2kítliêntipCRvàLFtrêntptinchchotamtkí
tLF.Mt
streamnhphânlàmtlotcácbyte.
b. Các tp tin: Trong C, mt tp tin là mt khái nim logic mà h
thng có th áp dng cho mi th t các tp
tin trênđĩa chođn các
terminal. Khibtđuthchinchngtrình,máytínhm3streamvăn
bnđãđcđnhnghĩatrclàstdin,stdoutvàstderr.Đivihuhtcác
hthng,các
thitbnàylàconsole.
§2.NHPXUTCHUN
27
1.Nhpxutkít,chuikít,đnhdngvàbnghi: Nhp xutcp2
(nhpxutchun)cungcp4cáchđcvàghidliukhácnhau(ngcli
nhpxutcâp1chdùng1trong4cáchnày).
Trchtdliucóthđcghimilnmtkít,tngtnhcách
làmviccaputchar()vàgetche()đđcdliut
bànphímvàhinthlên
mànhình.
Thhai,dliucóthnhpxuttheochuibngcácdùngcáchàm
gets()vàputs()
Thba,dliucóthđcnhpvàxuttheokhuôndngb
ngcác
hàmfprintf()vàfscanf()
Tht,dliuđcđcvàghitheokhicóchiudàicđnhthng
dùnglutrmnghaycutrúcbngcáchàmfread()vàfwrite().Tómli:
Cáchàmdùng
chungchohaikiunhphânvàvănbn
fopen:dùngmtptin
fclose:đóngtptin
fclose:đóngttccáctptin
fflush:dùnglàmschvùngđmcatptin
flushall:
dùnglàmschvùngđmcattctptin
ferror:chobitcóli(kháckhông)haykhôngcóli(bng0)
perror:thongbáolitrênmànhình
foef:chobitcuitptinhaycha
unlinkvàremove:dùngđloitptintrênđĩa
fseek:dichuyncontrđnvtríbtkìtrêntptin
ftell:chobitvtríhinticacontr
Cáchàmnhpxutkít
putcvàfputc:nhpkítvàotptin
getcvàfgetc:đckítttptin
fprintf:dùngghidliuđnhdnglêntptin
fscanf:dùngđc
dliuđnhdngttptin
fputs:dùngghichuilêntptin
fgets:dùngđcchuittptin
Cáchàmdùngchokiuxutnhpnhphân
putw:dùngghimts
nguyênhaibytelêntptin
gets:dùngđcmtsnguyênhaibytettptin
fwrite:dùngghimtmutinlêntptin
fread:dùngđcmtmutinttptin
2.D
ngvănbnvàdngnhphân: Cáchkhácđphânloicác thao tác
nhpxuttptinlànóđcmtheokiuvănbnhaynhphân.Đimkhác
28
bitgiahailoinàylàkítnewlinevàendofline.Đimthhaiđphân
bithaikiutptinlàlàcáchlutrcácsvàođĩa.Đividngvănbn
thìcács
đclutrthànhchuicáckítcòndngnhphânthìcács
đclunhtrongbnh,nghĩalàdùnghaibytechomtsnguyênvà4
bytechomtsfloat.
3.Nhpxut
chun:Chngtrìnhdùngcáchàmnhpxutcp2thng
dhiuhnnênchúngtasnghiêncutrc.
a.Nhpxutkít:Đnhpkítvàotptintadùnghàm
putc()hay
fputc().Đđckítttptintadùnghàmgetc()hayfgetc().Chngtrình
vídnàylàtolpcáckítbngcáchgõvàobànphímmilnmtkít
vàghivàomt
tptintrênđĩa.Chngtrìnhdùnghàmfopen()đmmt
tp tin, dùng hàm putc()đghi lên tp tin,dùng kít enterđkt thúc
chngtrình.
Chngtrình31
#include<stdio.h>
#include<conio.h>
voidmain()
{
FILE*fp;
charch;
printf(“Nhapcackitu:“);
fp=fopen(textfile,w);
while((ch=getche())!=\r)
putc(ch,fp);
fclose(fp);
}
b.Mmttptin:Trckhighimttptinlênđĩataphimtptin
đó
đã.Đmtptin,trchttaphikhaibáomtcontrchtiFILE.
FILElàmtstructurechađngcácthôngtinvcutrúccatptinvíd
nhkíchthc,v
trícabđmdliuhinhành.CutrúcFILEđc
khaibáotrongstdio.hnêntacnincludetptinnày.Ngoàirastdio.hcòn
xácđnhcáctênvàcácbinkhácđcdùngtrongchngtrìnhhngđn
cáctptin.Dovytrongchngtrìnhtacócâulnh:
FILE*fp;
Sauđótamtptinbnglnh:
fopen(“textfile”,”w”);
Khi vit nh vy s làm cho h điu hành bit là m m
t tp tin tên là
textfiletrongthmchinhànhđvitlêntptinđó(nh“w”).Tacóth
29
chotênđng dnđyđnumunm tptinthmcbt kì. Hàm
fopen()trvmtcontrchđncutrúcFILEchotptinvàcontrnày
đcctgitrongbinfp.
Chui“w”đcgilàkiu,nócónghĩalàghi
lêntptin.Cáckiumtptinlà:
“r”,”rt”mđđc,tptinphicótrênđĩa
“w”,”wt”mđghi,nutrênđĩađãcótptinthìnidungbghi
đè,nuchacóthìtptinđctolp
“a”,”at”mđnithêm,thôngtinđcghivàocuitptincũnu
đãcótptinhaytomitptin
“r+”,’’r+t”mđvađcvàghi,tptinphicótrênđĩa
“rb”mmttptinđđctheokiunhphân.Tptinphicósn
trênđĩa
“r+b”mmttptinđđctheokiunhphân.Tptinphicósn
trênđĩa
“w+”,”w+t”mđvađcvàghi,nidungtptinđãcótrênđĩas
bghiđèlên
“wb”mđghitheokiunhphân,nutrênđĩađãcótptinthì
nidungbghiđè,nuchacóthìtptinđctolp
“a+”,”a+t” m đ đc và ni thêm, nu tp tin cha có thì nó s
đctora
“ab”mđđcvànithêmtheokiunhphân,nutptinchacó
thìnósđctora
c.Ghilêntptin:Khitptinđãđcm,tacóthghilêntptin
t
ngkítmtbngcáchdùnghàm:
putc(ch,fp)
Hàmputc()tngtcáchàmputch()vàputchar().Hàmputc()ghilêntp
tincócutrúcFILEđcnđnhbibinfpnhnđckhimtptin.
Tin
trìnhghiđctinhànhchođnkhinhnenter.
d.Đóngtptin:Khikhôngđcghinatacnđóngtptin.Câulnh
đóngtptinlà:
fclose(fp);
Tabáochohthngbit
làcnđóngtptinchbifp.
e.Đctptin:Nutacóthghilêntptinthìtacũngcóthđct
tptin.Tacóvídsau:
Chngtrình32
#include<stdio.h>
#include<conio.h>
main()
{
FILE*fp;
30
intch;
clrscr();
fp=fopen(textfile,r);
while((ch=getc(fp))!=EOF)
printf(%c,ch);
fclose(fp);
getch();
}
f.Ktthúctptin:Skhácnhâuchyugiachngtrìnhđcvà
ghilàchngtrìnhđcphiphânbi
tđcđâulàkítEOF.Nókhông
philàmtkítàmlàmtsnguyêndohđiuhànhgiti.Khihttp
tintagpmãktthúctptinEOF(đnh
nghĩatrongstdio.hbng1)và
hàmfoef()chotrkháckhông.Ngitachn1làmmãktthúcvìnucha
gpcuitptinthìsđcđcmtbytemàmãsnmtrong
khong0255
.Nhvygiátr1khôngtrùngvibtkìkítnàonàođcđcttptin.
Trongkhichngtrìnhđangđcvàhinthcáckítthìnótìmkimm
giá
tr1hayEOF.Khithygiátrnày,chngtrìnhsktthúc.Chúngta
dùngmtbinnguyênctgimtkítđcđc,dođótacóthhiudu
EOFnhlàmttrnguyêncó
trlà1.Nudùngmtbinkiuchar,chúg
tacóthdùngttccáckítt0 255đólàthp8.Dođónudùng
binnguyên,tabođmrngchcó
mtgiátr16bitlà1,đólàduEOF.
g.Sphinphckhimtptin:Haichngtrìnhtatrìnhbàytrêncó
mtlitimn.Nutptinđãđcchđnhkhông
mđcthìchng
trình không chy. Li này có th là do tp tin cha có (khiđc) hayđĩa
khôngcònđch(khighi).Dođóvnđlàphikimtraxemtptincóm
đchaykhông,
nutptinkhôngmđcthìhàmfopen()trvtr0(0là
NULLtrongstdio.h).KhinàyCcoiđâykhôngphilàđachhpl.Nh
vytavitlichngtrìnhtrênnhsau:
Chng
trình33
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
voidmain()
{
FILE*fp;
intch;
clrscr();
if((fp=fopen(file,r))==NULL)
31
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while((ch=getc(fp))!=EOF)
printf(%c,ch);
fclose(fp);
}
h.Đmskít:Khnăngđcvàghitptintrêncscáckítcho
phéptrinkhaimt
sngdng.Chúngtaxemxétchngtrìnhđmskí
tsau:
Chngtrình34
#include<stdio.h>
#include<conio.h>
main(intargc,char*argv)
{
FILE*fp;
charstring[8];
intcount=0;
clrscr();
if(argc!=2)
{
printf(Formatc:\<tenchuongtrinh>
<tentaptin>);
getch();
exit(1);
}
if((fp=fopen(argv[1],r))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while(getc(fp)!=EOF)
count++;
fclose(fp);
printf(Taptin%sco%dkitu,argv[1],count);
getch();
32
}
i.Đmst:Tacóthsachngtrìnhtrênthànhchngtrìnhđm
st.
Chngtrình35
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main(intargc,char*argv[])
{
FILE*fp;
charch,string[81];
intcount=0;
int
white=1;
clrscr();
if(argc!=2)
{
printf(Formatc:\<Tenchuongtrinh><tentaptin>\n);
getch();
exit(1);
}
if((fp=fopen(argv[1],r))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while((ch=getc(fp))!=EOF)
switch(ch)
{
case:/*nucódutr
ng,dòngmihaytab*/
case\t:
case\n:white++;
break;
default:if(white)
{
white=0;
count++;
}
33
}
fclose(fp);
printf(Taptin%sco%dtu,argv[1],count);
getch();
return0;
}
k.Vàorachui:Đchayghichuitrêntptincũngtngtnhđc
hayghitngkítriêngl.Taxétm
tchngtrìnhghichui
Chngtrình36
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
voidmain()
{
FILE*fp;
charstring[8];
clrscr();
if((fp=fopen(a.txt,w))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while(strlen(gets(string))>0)
{
fputs(string,fp);
fputs(\n,fp);
}
fclose(fp);
}
Trongchngtrìnhmichuiktthúcbngcáchgõentervàktthúc
chngtrìnhbngcáchgõenterđudòngmi.Dofputs()khôngtđ
ng
thêmvàomãktthúcđchuyndòngminêntaphithêmvàotptinmã
này.Chngtrìnhđcmtchuittptin:
Chngtrình37:
#include<stdio.h>
34
#include<string.h>
#include<stdlib.h>
#include<conio.h>
voidmain()
{
FILE*fp;
charstring[81];
clrscr();
if((fp=fopen(a.txt,r))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while(fgets(string,81,fp)!=NULL)
printf(%s,string);
fclose(fp);
getch();
}
Hàmfgets()nhn
3đis:đachniđtchui,chiudàitiđaca
chui,vàcontrchtitptin.
l.Vnđsangdòngmi:Trongchngtrìnhđmkíttathyskít
đmđc bao gi cũng nh hns byte cótrong tp tinnàynhnđc
bnglnhdircaDOS.Khitaghimttptinvănbnvàođĩa,Ctđng
ghivàođĩachai
mãCRvàLFkhigpmãsangdòngmi“\n”.Ngcli
khiđctptintđĩa,cácmãCRvàLFđcthpthànhmãsangdòng
mi.Chngtrìnhsauminhhoathêmvkĩthut
vàorachui,nidung
tngtlnhtypecaDOS
Chngtrình38
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main(intargc,char*argv[])
{
FILE*fp;
charstring[81];
clrscr();
if(argc!=2)
35
{
printf(Formatc:\<tenchuongtrinh><tentaptin>);
getch();
exit(1);
}
if((fp=fopen(argv[1],r))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while(fgets(string,81,fp)!=NULL)
printf(%s,string);
fclose(fp);
getch();
return0;
}
m.Cáctp
tinchunvàmáyin:Trênđâytađãnóiđncáchthctip
nhnmtcontrthamchiudnmttptintrênđĩacahàmfopen(),C
đnhnghĩalitêchunc
a5tptinchunnhsau:
Tên Thitb
in Thitbvàochun(bànphím)
out Thitbrachun(mànhình)
err Thitblichun(mànhình)
aux Thitbphtrchun(cngnitip)
prn Thitbinchun(máyin)
Tacóthdùngcáctênnàyđtruycpđncácthitb.Chngtrìnhsau
dùnghàmfgets(0vàfputs()đinnidungmttptinramáyin
Chngtrình39
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main(intargc,char
*argv[])
{
FILE*fp1,*fp2;
36
charstring[81];
clrscr();
if(argc!=2)
{
printf(Formatc:\<tenchuongtrinh><tentaptin>);
getch();
exit(1);
}
if((fp1=fopen(argv[1],r))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
if((fp2=fopen(prn,w))==NULL)
{
printf(Khong
moduocmayin\n);
getch();
exit(1);
}
while(fgets(string,81,fp1)!=NULL)
fputs(string,fp2);
fclose(fp1);
fclose(fp2);
getch();
return0;
}
Trongchngtrìnhtrênmáyinđccoilàtptincótênlàprn
n.Nhpxutđnhdng:Trcđây
tađãđcpđnnhpxutkít.
Nhngscóđnhdngcũngcóthghilênđĩanhcáckít.Taxétchng
trìnhsau:
Chngtrình310:
#include<stdio.h>
#include<conio.h>
main()
{
FILE*p;
inti,n;
floatx[4],y[4];
37
clrscr();
p=fopen(test.txt,w);
printf(Chosocapsocannhapn=);
scanf(%d,&n);
fprintf(p,%d\n,n);
printf(Chocacgiatrixvay\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>
voidmain()
{
FILE*fp;
charname[40];
intcode;
floatheight;
intn,i;
clrscr();
fp=fopen(b.txt,w);
printf(Chosonguoicannhap:);
scanf(%d,&n);
for(i=0;i<n;i++)
{
printf(Nhapten,maso
vachieucao:);
scanf(%s%d%f,name,&code,&height);
fprintf(fp,%s%d%f,name,code,height);
}
fclose(fp);
}
Chngtrình311
#include<stdio.h>
#include<conio.h>
38
voidmain()
{
FILE*p;
inti,n;
floatx[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>
voidmain()
{
FILE*fp;
char
name[2];
intcode,n,i;
floatheight;
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.KIUNHPHÂNVÀKIUVĂNBN
39
1.Mãsangdòngtheohaikiu:Trongdngvănbn,mtkítchuyndòng
tngngvi2mãCRvàLFkhighivàotptintrênđĩa.Ngclikhiđc,
thpCR/LF
trênđĩatngngvikítsangdòngmi.Tuynhiênnu
mtptintheokiunhphânthì2mãCRvàLFlàphânbitnhau.Tđós
kítmàchngtrìnhđmđckhácvi
trnghpmtptinbngkiu
vănbn.
Chngtrình312:Chngtrìnhđmskítbngcáchmtptintheo
kiunhphân
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
voidmain(intargc,char*argv[])
{
FILE*fp;
charstring[81];
intcount=0;
clrscr();
if(argc!=2)
{
printf(Formatc:\<tenchuongtrinh><tentaptin>);
getch();
exit(1);
}
if((fp=fopen(argv[1],rb))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
while(getc(fp)!=EOF)
count++;
fclose(fp);
printf(Taptin%sco%dkitu,argv[1],count);
getch();
}
2.Mãktthúctptintheo2kiu:Skhácbitthhaikhimtptintheo
kiunhphânhaykiukítcònlàch
nhìnnhnkítktthúctptin.
Nóichungcáctptinđuđcqunlítheokíchthccanóvàkhiđc
ht s byteđã ch ra trong kích thc tp tin thì du hi
u EOF s đc
40
thôngbáo,duhiuđóngvimã1Ah(hay26h10).Khiđóngtptin
vănbn,mã1Asđctđngchènvàocuitptinđlàmduhiukt
thúctptin(tngđng
mãCtrlZ).Dovynubngcáhnàođótachèn
mã1Avàomtvtrígiatptin,thìkhimtptintheokiuvănbnvà
đcđnmãnàychngtrìnhđcs
ngnghnvìchínhlúcđóhàmđc
phátsinhgiátr1đbáochochngtrìnhlàđãktthúctptin.Nuđã
lusvàotptintheodngnhphânthìkhimtptinc
nphimtheo
dngnhphân.Nukhôngscómtsnàođólà1Avàvicđctptin
theokiuvănbnsktthúcngoàiýđnh.Tngt,vitptin
mtheo
kiunhphânmã10khôngđcnhìnnhnlàmãsangdòngmivìkhông
đcxemlàtngngvithpCR/LFna.
3.Chngtrìnhminhho:Chúngtaxétmtchngtrình
dùngkiunh
phânđkhosáttptin
Chngtrình313
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#definelength 10
#definetrue 0
#definefalse1
voidmain(intagrc,char*argv[])
{
FILE*fp;
intch;
intj,noteof;
unsignedcharstring[length+1];
clrscr();
if(agrc!=2)
{
printf(Dangc:\<tenchuongtrinh><tentaptin>);
getch();
exit(1);
}
if((fp=fopen(argv[1],rb))==NULL)
{
printf(Khongmoduoctaptin\n);
getch();
exit(1);
}
41
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;/*kituinduoc*/
else
*(string+j)=.;/*kitukhonginduoc*/
}
*(string+j)=\0;
printf(%s\n,string);
}
while(noteof==true);
fclose(fp);
getch();
}
4.Cáchàmfreadvàfwrite:
a.Ghicutrúcbngfwrite:Taxétmtchngtrìnhghicutrúclên
đĩa.Trongchngtrìnhtadùnghàmfread().Hàmnàycó4đis:đach
đghicu
trúc,kíchthccacutrúc,scutrúcsghivàcontrchti
tptin.
Chngtrình314
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
voidmain()
{
charchso[10];
FILE*fp;
structnguoi{
charten[30];
intso;
floatcao;
}nv;
42
clrscr();
if((fp=fopen(nhanvien.rec,wb))==NULL)
{
printf(Khongmoduocfile\n);
getch();
exit(1);
}
do
{
printf(\nChoten:);
gets(nv.ten);
printf(Chomaso:);
gets(chso);
nv.so=atoi(chso);
printf(Chochieucao:);
gets(chso);
nv.cao=atof(chso);
fwrite(&nv,sizeof(nv),1,fp);
printf(Tieptuckhongy/n?);
}
while(getch()==y);
fclose(fp);
}
b.Đccutrúcbngfread:Tadùnghàmfread()đđccutrúcghi
trênmttptin.Cácđiscafread()cũnggingnhfwrite().Hàm
fread()
trvscanhngmcđãđcđcti.Nutptinđãktthúcnóchotr
âm.Taxétvídsau:
Chngtrình315
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
voidmain()
{
FILE*fp;
structnguoi{
charten[30];
intso;
floatcao;
}nv;
43
clrscr();
if((fp=fopen(nhanvien.rec,rb))==NULL)
{
printf(Khongmoduocfile\n);
getch();
exit(1);
}
do
{
printf(\nTen:%s\n,nv.ten);
printf(Maso:%03d\n,nv.so);
printf(Chieucao:%.2f\n,nv.cao);
}
while(fread(&nv,sizeof(nv),1,fp)==1);
fclose(fp);
getch();
}
c.Ghimng
bngfwrite(:Hàmfwrite()cũngdùngghimnglênđĩa.
Taxétvídsau:
Chngtrình316
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
inttable[10]={1,2,3,4,5,6,7,8,9,10};
voidmain()
{
FILE*fp;
clrscr();
if((fp=fopen(table.rec,wb))==NULL)
{
printf(Khongmo
duocfile\n);
getch();
exit(1);
}
fwrite(table,sizeof(table),1,fp);
fclose(fp);
44
}
d.Đcmngbngfread():Saukhighimnglênđĩatacóthđccác
phntcamngtđĩabnghàmfread().
Chngtrình317
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
voidmain()
{
FILE
*fp;
inta[10];
inti;
clrscr();
if((fp=fopen(table.rec,rb))==NULL)
{
printf(Khongmoduocfile\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ídvcsdliu:
Taxétchngtrìnhqunlínhânviênvicác
tptintrênđĩanhsau
Chngtrình318
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#definetrue1
45
structnguoi{
charten[30];
intso;
floatcao;
};
structnguoinv[10];
intn=0;
charnumstr[10];
voidmain()
{
charch;
voidnewname(void);
voidlistall(void);
voidwfile(void);
voidrfile(void);
clrscr();
while(true)
{
printf(\nGoedenhapnhanvienmoi\n);
printf(Goldelietkenhanvien\n);
printf(Gowdeghilendia\n);
printf(Gordedocfiletudia\n);
printf(Goqdeketthucchuongtrinh\n\n);
ch=getch();
switch(ch)
{
casee:newname();
break;
casel:listall();
break;
casew:wfile();
break;
caser:rfile();
break;
caseq:exit(1);
default:printf(Nhapsaikitu,chonlai!);
}
}
}
46
voidnewname()
{
charnumstr[81];
printf(\nBanghiso%d\nChoten:,n+1);
gets(nv[n].ten);
printf(Chomasoco3chuso:);
gets(numstr);
nv[n].so=atoi(numstr);
printf(Chochieucao:);
gets(numstr);
nv[n++].cao=atof(numstr);
}
voidlistall()
{
intj;
if(n<1)
printf(
Danhsachrong\n);
for(j=0;j<n;j++)
{
printf(\nBanghiso%d\n,j+1);
printf(Ten:%s\n,nv[j].ten);
printf(Manhanvien:%3d\n,nv[j].so);
printf(Chieucao:%4.2f\n,nv[j].cao);
}
}
voidwfile()
{
FILE*fp;
if(n<1)
{
printf(Danhsachrong,
khongghi\n);
getch();
exit(1);
}
if((fp=fopen(nv.rec,wb))==NULL)
{
printf(Khongmoduocfile\n);
getch();
47
exit(1);
}
else
{
fwrite(nv,sizeof(nv[0]),n,fp);
fclose(fp);
printf(Daghi%3dbanghilendia\n,n);
}
}
voidrfile()
{
FILE*fp;
if((fp=fopen(nv.rec,rb))==NULL)
{
printf(Khongmoduocfile\n);
getch();
exit(1);
}
else
{
while(fread(&nv[n],sizeof(nv[n]),1,fp)==1)
{
clrscr();
printf(Banghiso%3d\n,n+1);
printf(Tennhanvien:%s\n,nv[n].ten);
printf(Manhanvien:%3d\n,nv[n].so);
printf(Chieucaocuanhanvien:%.2f\n,nv[n].cao);
getch();
n++;
}
fclose(fp);
printf(Xong!Tongsobanghidadoc%3d\n,n);
}
}
§4.CÁCFILENGUNHIÊN
Cáctptinđcptrcđâylàcáctptintunt,nghĩalàtptinmà
khiđchayghiđtheochđtunttđuđncuitptin.Đ
ivitp
tintunttakhôngthđchayghimtcáchtrctiptimtvtríbtkì
48
trêntptin.Tptinngunhiênchophéptatruycpngunhiênvàonhng
vtrícnthittrêntptin.Cáchàmdùngkhitruycptptinngunhiênlà:
rewind():dichuyn
contrtptinvđutptin
Cúpháp:voidrewind(FILE*fp);
fseek():dichuyncontrtptinvvtrímongmun
Cúpháp:intfseek(FILE*fp,longsb,intxp)
fpcontrtptin
sb
sbytecndichuyn
xpvtríxutphátmàvicdchchuynđcbtđutđó.xpcóth
cócácgiátrsau:
xp=SEEK_SEThay0:xutpáhttđutptin
xp=SEEK_CUR
hay1:xutpháttvtrícontrhinti
xp=SEEK_ENDhay2:xutpáhttcuitptin
ftell():chobitvtríhinticacontrtptin
Taxétchngtrình
vídsau:
Chngtrình319
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
voidmain()
{
structnguoi{
charten[30];
intso;
floatcao;
}nv;
intrecno;
FILE*fp;
longintoffset;
clrscr();
if((fp=fopen(nhanvien.rec,r))==NULL)
{
printf(Khong
moduocfile\n);
getch();
exit(1);
}
printf(Banmuondocbanghithumay:);
scanf(%d,&recno);
recno;
49
offset=recno*sizeof(nv);
if(fseek(fp,offset,0)!=0)
{
printf(Khongdichuyenduoccontrofiletoido\n);
getch();
exit(1);
}
fread(&nv,sizeof(nv),1,fp);
printf(Ten:%s\n,nv.ten);
printf(Manhanvien:%3d\n,nv.so);
printf(Chieucao:%4.2f\n,nv.cao);
getch();
}
§5.LIVÀORA
Nói
chung,khimtptinthànhcôngtacóthghilênnó.Tuynhiên,
nhiutrnghpkhôngmđctptinnhngtakhôngbitlidođâu.
Đxácđnhlõitadùnghàmferror().Hàmnàycóđis
làcontrtptin.
Hàmscógiátrkhôngnukhôngcóligì.Ngclihàmchogiátrkhác
không.Tacũngcóthdùnghàmperror()đchnidungli.
Chngtrình320
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
voidmain()
{
FILE*fp;
charname[40],numstr[10];
intcode;
floatheight;
intn,i;
clrscr();
fp=fopen(a:\newfile.txt,w);
printf(Chosonguoicannhap:);
gets(numstr);
n=atoi(numstr);
for(i=0;i<n;i++)
{
50
printf(Nhapten:);
gets(name);
printf(Nhapmaso:);
gets(numstr);
code=atoi(numstr);
printf(Nhapchieucao:);
gets(numstr);
height=atof(numstr);
fprintf(fp,%s%d%f,name,code,height);
if(ferror(fp))
{
perror(Loighifile);
getch();
exit(1);
}
}
fclose(fp);
}
Saulidotaghi,trìnhbiêndchsthôngbáolicthtrongcâu“
Loighifile:nosuchfiledirectory”
§6.VÀORAMCHTHNG
1.Cáctptintiêuđvàbinchun:Trongcáchvào
ramchthng,ta
phikhitobđmriđtdliuvàođótrcghihayđc.Vàoramc
hthngcólichlngmãíthnvàorachunvà
tcđsnhanhhn.
Đdùngcáchàmcp1taphicncáctptintiêuđsau:
io.hchacácprototypecacáchàmcp1
fcntl.hchacácđnhnghĩaquyntruycp
sys/stat.hchá
cácđnhnghĩathuctính
dó.hchacácthuctínhtheoDOS
2.Tómttcáchàm:
creattotptinmi
_creattotptinmitheokiunhphân
openmtptin
_openmtptinđãtnti
closevà_closeđóngtptin
chmodthayđithuctínhcatptin
_chmodethayđithuctínhcatptintheokiuDOS
51