Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
474,67 KB
Nội dung
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 [...]... có hi u qu n u t p tin ã có ) M m t t p tin ch c M m t t p tin ch c hay ghi M và c t b b t t p tin M t p tin ghi M t p tin ki u nh phân M t p tin ki u v n b n 6 Danh s c a t p tin: Trong vào ra chu n, con tr t p tin s nh n c ngay khi g i hàm fopen() còn trong nh p xu t b ng hàm c p 1 ta nh c giá tr nguyên g i là danh s c a t p tin ây là s gán cho m t t p tin c th tham chi u n t p tin này N u hàm open()... Các t p tin c p tr c ây là các t p tin tu n t , ngh a là t p tin mà khi c hay ghi theo ch tu n t t u n cu i t p tin iv it p tin tu n t ta không th c hay ghi m t cách tr c ti p t i m t v trí b t kì 48 trên t p tin T p tin ng u nhiên cho phép ta truy c p ng u nhiên vào nh ng v trí c n thi t trên t p tin Các hàm dùng khi truy c p t p tin ng u nhiên là: rewind(): di chuy n con tr t p tin v u t p tin Cú... 2 Tóm t t các hàm: creat t o t p tin m i _creat t o t p tin m i theo ki u nh phân open m t p tin _open m t p tin ã t n t i close và _close óng t p tin chmod thay i thu c tính c a t p tin _chmode thay i thu c tính c a t p tin theo ki u DOS 51 perror thông báo l i (stdlib.h) write ghi m t dãy các byte read c m t dãy các byte lseek dùng di chuy n con tr v trí 3 c t p tin theo cách vào ra h th ng: Ta có... lúc 2 t p tin v i danh s là inhamdle và outhandle Bi u th c m t p tin ngu n không có gì c bi t còn bi u th c m t p tin ích có d ng: outhandle = open(argv[2] ,O_CREAT | O_WRONLY | O_BINARY , S_IWRITE) v i O_CREAT t o t p tin trên a O_WRONLY ch ghi lên t p tin O_BINARY m t p tin theo ki u nh phân Khi m t p tin v i O_CREAT, i th 3 c a open() là m t trong 3 tr : S_IWRITE : ch cho phép ghi lên t p tin S_IREAD... lên t p tin: Ghi thông tin lên t p tin ph c t p h n c t t p tin Ta có ch ng trình ví d sau dùng chép t m t t p tin này sang t p tin khác Ch ng trình 3 24 #include #include #include #include #include #include #define BUFFSIZE 4096 char buff[BUFFSIZE]; void main(int argc,char *argv[]) { int inhandle,outhandle,bytes; clrscr(); if (argc! =3) { printf(... ); 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ã k t thúc t p tin theo 2 ki u: S khác bi t th hai khi m t p tin theo ki u nh phân hay ki u kí t còn là ch nhìn nh n kí t k t thúc t p tin Nói chung các t p tin u c qu... kích th c c a nó và khi c h t s byte ã ch ra trong kích th c t p tin thì d u hi u EOF s c 40 thông báo, d u hi u ó ng v i mã 1Ah(hay 26 h 10) Khi óng t p tin v n b n, mã 1A s ct ng chèn vào cu i t p tin làm d u hi u k t thúc t p tin (t ng ng mã Ctrl Z) Do v y n u b ng cáh nào ó ta chèn mã 1A vào m t v trí gi a t p tin, thì khi m t p tin theo ki u v n b n và c n mã này ch ng trình c s ng ng h n vì chính... p tin N u ã l u s vào t p tin theo d ng nh phân thì khi m t p tin c n ph i m theo d ng nh phân N u không s có m t s nào ó là 1A và vi c c t p tin theo ki u v n b n s k t thúc ngoài ý nh T ng t , v i t p tin m theo ki u nh phân mã 10 không c nhìn nh n là mã sang dòng m i vì không c xem là t ng ng v i t h p CR/LF n a 3 Ch ng trình minh ho : Chúng ta xét m t ch ng trình dùng ki u nh phân kh o sát t p tin. .. t p tin: C ng gi ng nh vào ra b ng hàm c p 2 , ta ph i m t p tin tr c khi c hay ghi b ng phát bi u: inhandle=open(argv[1],O_RDONLY | O_BINARY); Bi u th c này thi t l p s liên l c gi a t p tin và h i u hành Trong bi u th c ta c n m t h ng lag oflag là d u hi u cho bi t m c dùng t p tin oflag O_APPEND O_CREAT O_RDONLY O_RDWR O_TRUNC O_WRONLY O_BINARY O_TEXT ý ngh a t con tr cu i t p tin T o t p tin. .. con tr t p tin v v trí mong mu n Cú pháp: int fseek(FILE *fp , long sb , int xp) fp con tr t p tin sb s byte c n di chuy n xp v trí xu t phát mà vi c d ch chuy n c b t ut ó xp có th có các giá tr sau: xp = SEEK_SET hay 0: xu t páht t u t p tin xp = SEEK_CUR hay 1: xu t phát t v trí con tr hi n t i xp = SEEK_END hay 2: xu t páht t cu i t p tin ftell(): cho bi t v trí hi n t i c a con tr t p tin Ta xét . “w”,”wt”mđghi,nutrênđĩađãcótp tin thìnidungbghi đè,nuchacóthìtp tin đctolp “a”,”at”mđnithêm,thông tin đcghivàocuitp tin cũnu đãcótp tin haytomitp tin “r+”,’’r+t”mđvađcvàghi,tp tin phicótrênđĩa . ftell:chobitvtríhinticacontr Cáchàmnhpxutkít putcvàfputc:nhpkítvàotp tin getcvàfgetc:đckítttp tin fprintf:dùngghidliuđnhdnglêntp tin fscanf:dùngđc dliuđnhdngttp tin fputs:dùngghichuilêntp tin . 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())!=
) putc(ch,fp); fclose(fp); } b.Mmttp tin: Trckhighimttp tin lênđĩataphimtp tin đó đã.Đmtp tin, trchttaphikhaibáomtcontrchtiFILE. FILElàmtstructurechađngcácthông tin vcutrúccatp tin víd nhkíchthc,v trícabđmdliuhinhành.CutrúcFILEđc khaibáotrongstdio.hnêntacnincludetp tin này.Ngoàirastdio.hcòn xácđnhcáctênvàcácbinkhácđcdùngtrongchngtrìnhhngđn cáctp tin. Dovytrongchngtrìnhtacócâulnh: FILE*fp; Sauđótamtp tin bnglnh: