1 / 36

CHƯƠNG 9 TẬP TIN (FILE)

CHƯƠNG 9 TẬP TIN (FILE). 1. GiỚI THIỆU. C/C++ hổ trợ 2 hệ thống nhập xuất : Một hệ thống thừa kế từ ngôn ngữ C Một hệ thống nhập xuất hướng đối tượng của C++. . 2. Streams và Files. Hệ thống nhập xuất của C

haig
Download Presentation

CHƯƠNG 9 TẬP TIN (FILE)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHƯƠNG 9TẬP TIN (FILE)

  2. 1. GiỚI THIỆU • C/C++ hổtrợ 2 hệthốngnhậpxuất: • Mộthệthốngthừakếtừngônngữ C • Mộthệthốngnhậpxuấthướngđốitượngcủa C++.

  3. 2. Streamsvà Files • Hệthốngnhậpxuấtcủa C • Cung cấpmộtgiaodiện (interface) nhấtquánđộclậpvớithiếtbịthậtsựmàchươngtrìnhtươngtác. • cungcấpmộtmứcđộtrừutượnggiữalậptrìnhviênvàthiếtbịnhậpxuất. Sựtrừutượngnàyđượcgọi là streamvàthiếtbịthậtsựđượcgọi là file.

  4. 3. Streams (dòngnhậpxuất) • Hệthống file của C đượcthiếtkếđểlàmviệcvớinhiềuloạithiếtbịkhácnhaunhưterminals (thiếtbịđầucuối), cácloại ổ đĩa, băngtừ, ... • Hệthống file chuyểnđổimỗiloạithànhmộtthiếtbịlogicgọi là stream.Tấtcảstreamcócùnghành vi

  5. 3. Streams (dòngnhậpxuất) • Streamđộclậpvớithiếtbịnêncùngmộthoạtđộngtrênstreamnhưghivàomộttập tin trênđĩacũngcóthểdùngđểghivàoloạithiếtbịkhácnhư console (mànhình). • Cóhailoạistream: • Vănbản (text) • Nhịphân (binary).

  6. 3.1. Text Streams • Mộttext stream làmộtchuổicáckýtự. Trongmột text stream, mộtsốkýtựcóthểbịchuyểnđổitùythuộcmôitrường. • Vídụ, kýtự newline ('\n') cóthểbịđổithànhcặpkýtự carriage return/linefeed (kýtựxuốngdòngvàvềđầudòng).

  7. 3.1. Text Streams • Khôngcóquanhệmột-mộtgiữacáckýtựđượcviết (hay đọc) vànhữngkýtựtrêncácthiếtbịngoài. Do đósốkýtựđượcviết (hay đọc) cóthểkhácsốsốkýtựtrênthiếtbịngoài.

  8. 3.2. Binary Streams • Mộtbinary stream làmộtchuổi bytes tươngứngmột-mộtvớichuổi bytes trênthiếtbịngoài. Nghĩalàkhôngcósựchuyểnđổixảyra. Do đó, số bytes đượcviết (hay đọc) thìbằngvớisố bytes trênthiếtbịngoài.

  9. 4. FILES • Một file cóthểlàmộttập tin trênđĩa, một terminal, hay máy in. • Đểtạokếtnối (associate) giữamột stream vớimột file tadùnghoạtđộngmở (open). • Khi file đượcmở, thông tin cóthểđượctraođổigiữa file vàchươngtrình.

  10. 4. FILES • Khôngphảitấtcả file đềucócùngkhảnăngnhưnhau. • Vídụ, mộttập tin trênđĩa (file) cóthểhỗtrợtruyxuấtngẫunhiêntrongkhiđómáy in (cũnglà file) thìkhôngthể. • “Tấtcả stream lànhưnhaunhưng file thìkhông".

  11. 4. FILES • Đểngắtkếtnốigiữamột stream vớimột file tadùnghoạtđộngđóng (close). Nếuđóngmột file đangmởchoxuất (output) thìnội dung của stream tươngứngđượcviếtrathiếtbịngoài. • Qúatrìnhnàyđượcgọilà flushing vàđảmbảolàkhôngcóthông tin bịđểlạitrongvùngđệm (buffer).

  12. 4. FILES • Tấtcả file đượctựđộngđóngkhichươngtrìnhmởchúngkếtthúcbìnhthường. Files khôngđượcđóngkhichươngtrìnhmởchúngbịkếtthúcbấtthườngnhưbịtreo (halt) hay khichươngtrìnhthựchiệnhàm abort(). • Mỗi stream liênđớivớimột file cómộtcấutrúckiểu FILE.

  13. 4.1. Cơbảnvềhệthống file Cáchàmliênquanđến file trongthưviệnstdio.h

  14. 4.1. Cơbảnvềhệthống file

  15. 4.1. Cơbảnvềhệthống file

  16. 4.2. Con trỏ file (File pointer) • Con trỏ file làmộtcấutrúckiểu FILE, trỏđếnthông tin về file nhưtên file, trạngthái, vàvịtríhiệnhànhcủa file. • Con trỏ file đượcdùngbởi stream tươngứngđểthựchiệncáchoạtđộngnhậpxuấttrên file. • Cúphápkhaibáo: FILE *fp;

  17. 4.3. Mở file • Hàmfopen() mởmột stream vàliênkếtmột file với stream đó. Hàmtrảvềmột con trỏ file trỏđếntập tin đượcmở. • Cúpháp: • filename: chứatên /đườngdẫncủa file • mode: chobiếtmở file theo mode nào. FILE *fopen(const char *filename, const char *mode);

  18. 4.3. Mở file • Các mode đểmởtập tin • "r"Nếutập tin đượcmởthànhcông, hàmfopen() nạpnóvàobộnhớvàtrảvề con trỏtrỏđếnkýtựđầutiêncủatập tin. Ngượclại, hàmfopen() trảvề NULL • "w"Nếutập tin tồntại, nội dung củanósẽbịghiđè

  19. 4.3. Mở file • "a"Nếutập tin đượcmởthànhcônghàmfopen() nạpnóvàobộnhớvàtrảvề con trỏtrỏđếnkýtựcuốicùngcủatập tin. Nếutập tin khôngtồntại, mộttập tin mớiđượctạo. Trảvề NULL nếukhôngthểmởtập tin. • "r+"Nếutập tin đượcmởthànhcông, hàmfopen() nạpnóvàotrongbộnhớ. Trảvề NULL nếukhôngthểmởtập tin.

  20. 4.3. Mở file • "a+"Nếutập tin đượcmởthànhcông, hàmfopen() nạpnóvàobộnhớvàtrảvề con trỏtrỏđếnkýtựđầutiêncủatập tin. Nếutập tin khôngtồntại, mộttập tin mớiđượctạo. Trảvề NULL nếukhôngthểmởtập tin. • Cáchoạtđộngcóthểlàmtrêntập tin: đọc, ghithêmnội dung mớivàocuốitập tin. Khôngthểsửađổinội dung đangcótrongtập tin.

  21. 4.3. Mở file • Vídụ: FILE *fp; if((fp = fopen("test.txt","w")) == NULL) { cout << "Cannot open file"; exit(1); }

  22. 4.4. Đóng file • Hàmfclose() đóng stream đượcmởbởihàmfopen(). Khihàmđượcgọi, nósẽviếtbấtkỳdữliệunàovẫncòntrong buffer đến file rồiđóng file. • Cúpháp: • fp: là con trỏ file trảvềbởihàmfopen(). intfclose(FILE *fp);

  23. 4.5. Ghimộtkýtựđếnmột file • Cóhaihàmxuấtkýtựđến file làputc() vàfputc(). Haihàmnàylàtươngđươngnhau. Hàmputc() ghimộtkýtựđếnmột file đãđượcmởbởihàmfopen(). • Cúpháp: • fplà con trỏ file trảvềbởihàmfopen() • chlàkýtựđượcviếtđến file. intputc(intch, FILE *fp);

  24. VD: đọckýtựtừbànphímvàghivào file đếnkhigặpkt $ • void main() • { • FILE *fp; char ch; • if((fp=fopen(“test.txt”, "w"))==NULL) • { cout << "Cannot open file.\n"; • exit(1); • } • do { • ch = getchar();//đọctừbànphím • putc(ch, fp);//ghivào file • }while (ch != '$'); • fclose(fp);//đóng file • }

  25. 4.6. Đọcmộtkýtựtừmột file • Hàmđểđọcmộtkýtựtừfile:getc() vàfgetc() • Đọcmỗilầnmộtkýtựtừ file đượcmởbởihàmfopen() ở chếđộđọc (read). • Cúpháp: intgetc(FILE *fp); • fplà con trỏ file kiểu FILE . • Hàmtrảvềmãasciicủakýtựđượcđọc, trảvề EOF nếumộtlỗixảyra.

  26. void main() • { • FILE *fp; char ch; • if((fp=fopen(”test.txt”, "r"))==NULL) • { • cout << "Cannot open file.\n"; • exit(1); • } • ch = getc(fp); // đọcmộtkýtự • while (ch!=EOF) • { • putchar(ch); // in ramànhình • ch = getc(fp); • }fclose(fp); • }

  27. 3.8. Đọcvàviếtchuổitrên file • fgets(): đọcmộtchuổitừ stream tươngứngchođếnkhigặpkýtự newline hay đãđọcđược length-1 kýtự. • Hàmtrảvềstrnếuđọcthànhcôngvàmột con trỏ null nếukhông. • Cúpháp: char *fgets(char *str, int length, FILE *fp);

  28. 3.8. Đọcvàviếtchuổitrên file • fputs() ghimộtchuổitrỏđếnbởistrđến stream trỏđếnbởi con trỏ file fp. Hàmtrảvề EOF nếumộtlỗixảyra. • Cúpháp: intfputs(const char *str, FILE *fp);

  29. void main(void) • { • char str[80]; FILE *fp; • if((fp = fopen("teststr.txt", "w"))==NULL) • { • cout << "Cannot open file.\n"; • exit(1); • } • Do { • cout << "Enter a string (CR to quit):\n"; • gets(str); • strcat(str, "\n"); /* add a newline */ • fputs(str, fp); • } while(*str!='\n'); • }

  30. 4.9. Hàmfread() vàfwrite() • Hàmfread() vàfwrite() : đọcvàghimộtkhốicủabấtkỳdữliệunàocókíchthướclớnhơn 1 byte • Cúpháp: size_tfread(void *buffer, size_tnumbytes, size_t count, FILE *fp); size_tfwrite(const void *buffer, size_tnumbytes, size_tcount,FILE *fp);

  31. 4.10. Hàm rewind() • Hàm rewind() dichuyển indicator đếnđiểmbắtđầucủa file. • Hàmcó prototype nhưsau: void rewind(FILE *fp);

  32. 4.11. Hàmferror() • Hàmferror() chobiếtmộthoạtđộngtrên file đãgâyralỗi. • Cúpháp: intferror(FILE *fp); • Hàmtrảvề true nếumộtlỗiđãxảyravớihoạtđộngtrên file trướckhigọihàmferror(), ngượclạitrảvề false.

  33. 4.12. Xóa file • Hàm remove() dùngđểxóatập tin. • Cúpháp: int remove(const char *filename); • Hàmtrảvề zero nếuxóathànhcông, ngượclạitrảvề nonzero

  34. 4.13. Flushing a stream • Hàmfflush() dùngđểxuấttấtcảnội dung cònlạitrong buffer của stream. • Cúpháp: intfflush(FILE *fp); • Hàmghinội dung còntrong buffer đến file fp. Nếugọihàmfflush() khôngcóđốisốthìtấtcả file đangmở. • Hàmtrảvề 0 nếuthànhcông, ngượclạitrảvề EOF

  35. 5. Truyxuất file ngẫunhiên • Đểđọc hay viếttừ hay đếnmộtvịtríbấtkỳtrong file tacầnsựgiúpđỡcủahàmfseek(). Hàmnàydùngđểdichuyểnchỉbáo file. • Cúpháp: intfseek(FILE *fp, long numbytes, int origin);

  36. 6. Các stream chuẩn • Khimộtchươngtrìnhthựcthi, ba stream đượcmởtựđộng. Đólàstdin (standard input), stdout (standard output), vàstderr (standard error). stdindùngđểđọctừbànphím, stdoutvàstderrdùngđểviếtđếnmànhình. • Bởivì standard streams làcác con trỏ file nêncóthểdùngcáchàmnhậpxuấttrênchúng.

More Related