Tham khảo tài liệu ''kỹ thuật lập trình c chuyên nghiệp phần 8'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Trang 1Kiể ấ t ú
Kiểu cấu trúc
KháiKhái niệmniệm
KhaiKhai báobáo
PhânPhân loạiloại
PhânPhân loạiloại
CácCác thaothao táctác
Trang 2Khái iệ Khái niệm
TậpTập tintin làlà kiểukiểu dữdữ liệuliệu hỗhỗ trợtrợ truytruy xuấtxuất//lưulưu trữtrữ dữ
dữ liệuliệu trêntrên bộbộ nhớnhớ ngoàingoài
ỗỗ ểể
CC hỗhỗ trợtrợ haihai kiểukiểu tậptập tintin:: vănvăn bảnbản vàvà nhịnhị phânphân
TruyTruy xuấtxuất thôngthông quaqua concon trỏtrỏ FILEFILE
Trang 3Kiể FILE *
Kiể
Kiể FILE * (FILE * (kh ikh i bábá tt tdi htdi h)) hh héhé làlà iệ
KiểuKiểu FILE * (FILE * (khaikhai báobáo trongtrong stdio.hstdio.h) ) chocho phépphép làmlàm việcviệc với
với cáccác tậptập tin (tin (vănvăn bảnbản, , nhịnhị phânphân).)
Khai Khai báobáo con con trỏtrỏ tậptập tin tin
FILE * FILE * fpfp;;
ChúngChúng tata sửsử dụngdụng con con trỏtrỏ tậptập tin tin đểđể truytruy cậpcập ((đọcđọc, , ghighi, , thêm
thêm thôngthông tin) gg tin) các)) các tậptập tin.pp tin
Trang 4Mở tậ ti
Mở tập tin
FILE *
FILE * fopenfopen( const char *( const char *FileNameFileName const char *Mode);const char *Mode); FILE
FILE fopenfopen( const char ( const char FileNameFileName, const char Mode);, const char Mode);
Filename:Filename: têntên tậptập tintin cầncần mởmở CóCó thểthể chỉchỉ địnhđịnh mộtmột đườngđường
Filename: Filename: têntên tậptập tin tin cầncần mởmở CóCó thểthể chỉchỉ địnhđịnh mộtmột đườngđường dẫn
dẫn đầyđầy đủđủ chỉchỉ đếnđến vịvị trítrí củacủa tậptập tin.tin
Mode: Mode: chếchế độđộ mởmở tậptập tin: tin: chỉchỉ đọcđọc, , đểđể ghighi ((tạotạo mớimới), ), ghighi
thêm
thêm
NếuNếu thaoNếuNếu t aothao táct ao táctác mởtác ởở t àmở thànhthành côngt à công, , fopencô gcô g,, opefopen trảope t ảtrả vềt ả vềvề con về cocon trỏco t ỏtrỏ FILE t ỏ FILE trỏtrỏt ỏ đến
đến tậptập tin tin FileNameFileName
NếuNếu mởmở khôngkhông thànhthành côngcông ((FileNameFileName khôngkhông tồntồn tạitại, , khôngkhông thể
thể tạotạo mớimới), ), fopenfopen trảtrả vềvề giágiá trịtrị NULL.NULL
Trang 5Đó tậ ti
Đóng tập tin
i t
i t f lf l (( FILEFILE *fil t*fil t ))
int
int fclose(fclose( FILEFILE *filestream*filestream ));;
fil t t ỏt ỏ đếđế tậtậ titi đđ ởở ầầ đóđó
filestreamfilestream:: concon trỏtrỏ đếnđến tậptập tintin đangđang mởmở cầncần đóngđóng
Nế
Nế hh áá đóđó hà hhà h ôô f l ảả ềề 00
NếuNếu thaothao táctác đóngđóng thànhthành công,công, fclosefclose trảtrả vềvề 00
NếuNếu cócó lỗilỗi (tập(tập tintin đangđang sửsử dụng),dụng), fclosefclose trảtrả vềvề giágiá trịtrị EOFEOF
Trang 6Ví d Mở Đó tậ ti
Ví dụ : Mở, Đóng tập tin
11 FILE *FILE * ff
1. FILE * FILE * fpfp;;
//
// ởở VB TXT “VB TXT “ hỉhỉ đđ ””
2. // // mởmở VB.TXT “VB.TXT “chỉchỉ đọcđọc””
3. if( (if( (fpfp = = fopenfopen( “C:( “C:\\\\LTCLTC\\\\VB.TXT”, “r” )) == NULL)VB.TXT”, “r” )) == NULL)
{{ i fi f( “T( “T ii khkh dd \\ ”)”)
4. { { printfprintf( “Tap tin ( “Tap tin khongkhong mo mo duocduoc\\n”);n”);
5. exit(1);
}}
/* */
/* */
/ /
77 fclosefclose(( fpfp ););
7. fclosefclose( ( fpfp ););
Trang 7Tậ ti ă bả
Tập tin văn bản
TậpTập tinập tin vănvăn bảnbản làlà kiểukiểu tậptập tinập tin đượcđược lưuợợ lưu trữtrữ cáccác thôngthông tingg tin dưới
dưới dạngdạng kiểukiểu kýký tựtự
TruyTruy xuấtyy xuất tậptập tinpp tin vănvăn bảnbản::
theotheo từngtừng kýký tựtự
theotheo từngtừng dònggg dònggg
ChếChế độđộ mởmở trêntrên tậptập tintin vănvăn bảnbản
“r”“r” :: đọcđọc ((tậpọọ (( ậptập tinập tin phảiphải cópp có trêntrên đĩađĩa))))
“w”“w” :: ghighi ((ghighi đèđè lênlên tậptập tintin cũcũ hoặchoặc tạotạo mớimới nếunếu tậptập tintin không
không cócó trêntrên đĩađĩa))
“a”“a” :: ghighi nốinối vàovào cuốicuối tậptập tintin
“r+”“r+” :: đọcđọc//ghighi Tậpgg Tập tinpp tin phảiphải cópp có trêntrên đĩađĩa
“a+”“a+” :: đọcđọc,, ghighi vàovào cuốicuối tậptập tintin TạoTạo mớimới tậptập tintin nếunếu tậptập tin
tin chưachưa cócó trêntrên đĩađĩa
Trang 8t t f t f t
getc, putc, fgetc, fputc
getcgetc:: nhậnnhận kýký tựtự từtừ tậptập tintin
getcgetc: : nhậnnhận kýký tựtự từtừ tậptập tin.tin
int int getcgetc ( FILE *( FILE *fpfp ););
getc
getc trảtrả vềvề kýký tựtự đọcđọc đượcđược hoặchoặc
trả
trả vềvề EOFEOF nếunếu fpfp khôngkhông hợphợp lệlệ hoặchoặc đọcđọc đếnđến cuốicuối tậptập tintin trả
trả vềvề EOF EOF nếunếu fpfp khôngkhông hợphợp lệlệ hoặchoặc đọcđọc đếnđến cuốicuối tậptập tin.tin
putcputc: : ghipp ghi kýgg ký tựýý ựựtự rara tậptập tin.ập tin
int int putcputc ( ( intint Ch, FILE * Ch, FILE * fpfp ););
putc
putc trảtrả vềvề EOF EOF nếunếu thaothao táctác ghighi cócó lỗilỗi
cócó thểthể dùngdùng fgetcfgetc vàvà fputcfputc
Trang 9Ví d 1 t () đ hí đế khi E t
Ví dụ 1: getc() đọc phím đến khi Enter
1 #include #include < <stdio stdio hh> >
2 #include #include < <conio conio hh> >
3 #include #include < <stdlib stdlib hh> >
id i ()
4 void void main() main()
5 {{ FILE FILE ** fp fp;;
6 char char filename[ filename[67 67], ], ch ch;;
6 char char filename[ filename[67 67], ], ch ch;;
7 printf printf (( “Filename “Filename:: ““ ));;
8 gets gets (filename) (filename);;
9 if if (( ((fp fp = = fopen fopen (filename, (filename, “w” “w” )) )) == == NULL NULL )) // // mở mở tập tập tin tin mới mới để để ghi
10 {{ printf printf (( “Create “Create file file error error \\n”) n”);; exit exit ((11));; }}
10 {{ printf printf (( Create Create file file error error \\n ) n );; exit exit ((11));; }}
11 while while (( (( ch ch = = getche getche() () )) != != ‘‘\\r’ r’ )) // // đọc đọc cho cho đến đến khi khi gặp gặp ENTER ENTER
12 putc putc (( fp fp ));;
13 fclose fclose (( fp fp ));;
14 }}
Trang 10Ví dụ 2: putc() in nội dung tập tin văn ụ ụ p p () () ộ ộ g ập g ập bản ra màn hình
11 #include < #include <stdio h stdio h> >
1 #include < #include <stdio.h stdio.h> >
2 #include < #include <conio.h conio.h> >
3 #include < #include <stdlib.h stdlib.h> >
4 void main()
5 { FILE * { FILE * fp fp;;
6 char filename[67], char char filename[67], char ch ch;;
7 printf printf ( “Filename: “ ); ( “Filename: “ );
88 gets (filename);
8 gets (filename);
9 if (( if ((fp fp = = fopen fopen (filename, “r” )) == NULL ) // (filename, “r” )) == NULL ) // mở mở tập tập tin tin mới mới để để đọc đọc
10 { { printf {{ pp printf ( “Open file error ( “Open file error \\n”); exit (1); } ( ( p p n”); exit (1); } ); ); ( ); } ( ); }
11 while (( while (( ch ch = = getc getc ( ( fp fp ) ) != EOF ) // ) ) != EOF ) // đọc đọc cho cho đến đến hết hết tập tập tin tin
12 printf printf ( “%c”, ( “%c”, ch ch ); );
13 fclose fclose ( ( fp fp ); );
14 }}
Trang 11Ví dụ 3: Đếm số từ trong tập tin văn ụ ụ g ập g ập
bản.
1 #include #include <stdio <stdio h> h>
2 #include #include <conio <conio h> h>
3 #include #include <stdlib <stdlib h> h>
4 void void main() main()
5 {{ FILE FILE ** fp fp;;
6 char char filename[ filename[67 67], ], char char ch ch;;
77 int int count count = = 00 isword isword = = 00;;
7 int int count count = = 00,, isword isword = = 00;;
8 printf printf (( “Filename pp (( “Filename:: ““ ));; gets ));; gg gets (filename) (filename);; ( ( ) );;
9 if if ((fp ((fp = = fopen fopen (filename, (filename, “r” “r” )) )) == == NULL NULL )) // // mở mở tập tập tin tin mới mới để để đọc đọc
10 {{ printf printf (( “Open “Open file file error error \\n”) n”);; exit exit ((11));; }}
Trang 1211 while while (( (( ch ch = = getc getc (( fp fp )) )) != != EOF EOF )) // // đọc đọc cho cho đến đến hết hết tập tập tin tin
11 while while (( (( ch ch = = getc getc (( fp fp )) )) != != EOF EOF )) // // đọc đọc cho cho đến đến hết hết tập tập tin tin
12 {{
13 if if (( (( ch (( ch >= >= ‘a’ ‘a’ && && ch ch <= <= ‘z’ ‘z’ )) |||| (( ch )) |||| (( ch >= >= ‘A’ ‘A’ && && ch ch <= <= ‘Z’ ‘Z’ )) )) ))
14 isword isword = =11;;
15 if if (( (( ch ch == == ‘‘ ‘‘ |||| ch ch == == ‘‘\\n’ n’ |||| ch ch == == ‘‘\\t’ t’ )) && && isword isword ))
16 {{ count count ++ ++;; isword isword = = 00;; }}
17 }}
18 printf printf (( “Number “Number of of word word:: % %dd\\n”, n”, count) count);;
19 fclose fclose (( fp (( pp ));; fp ));;
20 }}
Trang 13f t ()
fgets()
fgetsfgets: : đọcgg đọc chuỗichuỗi kýký tựýý tự từtừ tậptập tin.pp tin
char * char * fgetsfgets ( char *( char *StrStr, , intint NumOfCharNumOfChar, FILE *, FILE *fpfp );); fgets
fgets đọcđọc cáccác kýký tựtự trongtrong tậptập tin tin chocho đếnđến khikhi gặpgặp mộtmột trongtrong các
các điềuđiều kiệnkiện::
các
các điềuđiều kiệnkiện::
EOF
gặpgặp dòngdòng mớimới
gặpgặp dòngdòng mớimới
đọcđọc đượcđược ((NumOfCharNumOfChar 1) 1) kýký tựtự trướctrước khikhi gặpgặp haihai điềuđiều kiện
kiện trêntrên
kiện kiện trêntrên
fgetsfgets trảtrả vềvề chuỗichuỗi kýký tựtự đọcđọc đượcđược ((kếtkết thúcthúc bằngbằng \\0)0) hoặchoặc
fgetsfgets trảtrả vềvề chuỗichuỗi kýký tựtự đọcđọc đượcđược ((kếtkết thúcthúc bằngbằng \\0) 0) hoặchoặc trả
trả vềvề con con trỏtrỏ NULL NULL nếunếu EOF EOF hoặchoặc cócó lỗilỗi khikhi đọcđọc
Trang 14f t ()
fputs()
f t hihi h ỗih ỗi kýký tt tậtậ titi
fputsfputs: : ghighi chuỗichuỗi kýký tựtự rara tậptập tin.tin
int int fputsfputs ( const char *( const char *StrStr, FILE *, FILE * fpfp );); int
int fputsfputs ( const char ( const char StrStr, FILE , FILE fpfp ););
fputsfputs trảtrả vềvề EOF EOF nếunếu thaothao táctác ghighi cócó lỗilỗi
Trang 15Hà hé tậ ti ă bả
Hàm chép tập tin văn bản
Có
Có tt áá thth iệ
CóCó trongtrong cáccác thưthư việnviện
#include <
#include <stdio.hstdio.h>>
#include
#include stdio.hstdio.h
#include <
#include <string.hstring.h>>
/*/* ViếtViết chươngchương trìnhtrình chépchép từtừ SourceFileSourceFile sangsang DestFileDestFile vàvà trả
trả vềvề sốsố kýký tựtự đọcđọc đươcđươc
Trang 16f f() f f() f i tf() ffl h()
feof(); fscanf(), fprintf(); fflush()
feoffeof:: chocho biếtbiết đãđã đếnđến cuốicuối tậptập tintin chưchư a(EOF)a(EOF)
feoffeof: : chocho biếtbiết đãđã đếnđến cuốicuối tậptập tin tin chưchư a(EOF).a(EOF)
int int feoffeof (FILE *(FILE *fpfp ););
fprintffprintf: :
int int fprintffprintf ( FILE *( FILE *fpfp, const char * Format, );, const char * Format, );
fscanffscanf: :
int int fscanffscanf ( FILE *( FILE *fp(( fp, const char * Format, );pp,, const char * Format, );, , );, );
fflushfflush: : làmlàm sạchsạch vùngvùng đệmđệm củacủa tậptập tintin
ii ffl hffl h ( FILE *( FILE * ff )) int
int fflushfflush ( FILE * ( FILE * fpfp ););
Trang 17Tậ ti Nhị hâ
Tập tin Nhị phân
Tậ
Tậ titi hịhị hâhâ làlà ộtột h ỗih ỗi áá kýký tt khôkhô hâhâ biệtbiệt
TậpTập tin tin nhịnhị phânphân làlà mộtmột chuỗichuỗi cáccác kýký tựtự, , khôngkhông phânphân biệtbiệt ký
ký tựtự in in đượcđược hay hay khôngkhông in in đượcđược
TậpTập tin tin nhịnhị phânphân thườngthường dùngdùng đểđể lưulưu trữtrữ cáccác cấucấu trúctrúc
((structstruct)) hoặchoặc unionunion
((structstruct) ) hoặchoặc union.union
KhaiKhai báobáo::
Khai Khai báobáo::
FILE * FILE * fpfp;;pp
TruyTruy xuấtyy xuất tậptập tin ập tin nhịnhị phânịị ppphân theotheo khốikhối dữdữ liệuliệu nhịệệ nhị phânịị ppphân