Kiể ấ túKiể ấ tú
Kiể
u c
ấ
u
t
r
ú
c
Kiể
u c
ấ
u
t
r
ú
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
Khái iệKhái iệ
Khái
n
iệ
m
Khái
n
iệ
m
TậpTậptintin làlà kiểukiểudữdữ liệuliệuhỗhỗ trợtrợ truytruy xuấtxuất//lưulưutrữtrữ
dữdữ liệuliệutrêntrên bộbộ nhớnhớ ngoàingoài
ỗỗ
ểể
CCh
ỗ
h
ỗ
trợtrợ haihai ki
ể
uki
ể
utậptập tintin::vănvănbảnbảnvàvà nhịnhị
p
hân
p
hân
TruyTruy xuấtxuất thôngthông quaqua concon trỏtrỏ FILEFILE
Kiể FILE *Kiể FILE *
Kiể
u
FILE
*Kiể
u
FILE
*
KiểKiể
FILE * (FILE * (
kh ikh i
bábá
tt
tdi htdi h
))
hh
héhé
làlà
iệiệ
Kiể
u
Kiể
u
FILE
*
(FILE
*
(
kh
a
ikh
a
i
bá
o
bá
o
t
rong
t
rong s
tdi
o.
h
s
tdi
o.
h
)
)
c
h
oc
h
o
phé
p
phé
p
là
m
là
mv
iệ
cv
iệ
c
vớivới cáccác tậptập tin (tin (vănvănbả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êmthêm thôn
g
thôn
g
tin
)
tin
)
cáccác tậ
p
tậ
p
tin.tin.
gg
))
pp
Mở tậ tiMở tậ ti
Mở
tậ
p
ti
n
Mở
tậ
p
ti
n
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ẫndẫn đầyđầy đủđủ chỉchỉđếnđếnvịvị trítrí củacủatậptập tin.tin.
Mode: Mode: chếchếđộđộ mởmở tậptập tin: tin: chỉchỉđọcđọc, , đểđể ghighi ((tạotạomớimới), ), ghighi
thêmthêm
NếuNếu
t
h
aot
h
ao
táctác
m
ở
m
ở
t
h
à
nh
t
h
à
nh
cô
n
gcô
n
g
,
,
f
ope
nf
ope
n
t
r
ảt
r
ả
vềvề
co
n
co
n
t
r
ỏt
r
ỏ
FILE FILE
t
r
ỏt
r
ỏ
NếuNếu
taotao
táctác
ởở
tàtà
cô gcô g
,,
opeope
t ảt ả
vềvề
coco
t ỏt ỏ
t ỏt ỏ
đếnđếntậptập tin tin FileNameFileName
NếuNếumởmở khôngkhông thànhthành côngcông ((FileNameFileName khôngkhông tồntồntạitại, , khôngkhông
thểthể tạotạomớimới), ), fopenfopen trảtrả vềvề giágiá trịtrị NULL.NULL.
Đótậ tiĐótậ ti
Đó
ng
tậ
p
ti
n
Đó
ng
tậ
p
ti
n
itit
fl (fl (
FILEFILE
*fil t*fil t
))
i
n
ti
n
t
f
c
l
ose
(f
c
l
ose
(
FILEFILE
*fil
es
t
ream
*fil
es
t
ream
))
;;
fil tfil t
t ỏt ỏ
đếđế
tậtậ
titi
đđ
ởở
ầầ
đóđó
fil
es
t
ream
fil
es
t
ream::concon
t
r
ỏt
r
ỏ
đế
n
đế
n
tậ
p
tậ
p
ti
n
ti
n
đ
ang
đ
ang m
ở
m
ở
c
ầ
nc
ầ
n
đó
ng
đó
ng
NếNế
hh
áá
đóđó
hà hhà h
ôô
flfl
ảả
ềề
00
Nế
u
Nế
ut
h
aot
h
ao t
á
ct
á
c
đó
ng
đó
ng t
hà
n
h
t
hà
n
h
c
ô
ng,c
ô
ng,
f
c
l
ose
f
c
l
ose tr
ả
tr
ả
v
ề
v
ề
00
NếuNếucó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
Ví d Mở Đótậ tiVí d Mở Đótậ ti
Ví
d
ụ :
Mở
,
Đó
ng
tậ
p
ti
n
Ví
d
ụ :
Mở
,
Đó
ng
tậ
p
ti
n
11
FILE *FILE *
ff
1
.
1
.
FILE
*
FILE
*
f
p
f
p;;
////
ởở
VB TXT “VB TXT “
hỉhỉ
đđ
””
2.2.
//
//
m
ở
m
ở
VB
.
TXT
“VB
.
TXT
“
c
hỉ
c
hỉ
đ
ọc
đ
ọc
””
3.3. if( (if( (fpfp = = fopenfopen( “C:( “C:\\\\LTCLTC\\\\VB.TXT”, “r” )) == NULL)VB.TXT”, “r” )) == NULL)
{{
ifif
(“T i(“T i
khkh
dd
\\
”)”)
4.4.
{
{
p
r
i
nt
fp
r
i
nt
f
(
“T
ap t
i
n
(
“T
ap t
i
n
kh
ong
kh
ong mo mo
d
uoc
d
uoc
\\
n
”)
;n
”)
;
5.5. exit(1); exit(1);
}}
6.6.
}
}
/
**
//
**
/
/
//
/
77
fclosefclose
((
fpfp
););
7
.
7
.
fclosefclose
(
(
fpfp
););
Tậ ti ă bảTậ ti ă bả
Tậ
p
ti
n v
ă
n
bả
n
Tậ
p
ti
n v
ă
n
bả
n
T
ập
T
ập
tintin vănvănbảnbảnlàlà ki
ể
uki
ể
ut
ập
t
ập
tintin đư
ợ
cđư
ợ
clưulưutr
ữ
tr
ữ
cáccác thôn
g
thôn
g
tintin
ậpập
ậpập
ợợ
gg
dướidướidạngdạng kiểukiểukýký tựtự
Tru
y
Tru
y
xu
ấ
txu
ấ
ttậ
p
tậ
p
tintin vănvănbảnbản::
yy
pp
theotheo từngtừng kýký tựtự
theotheo từn
g
từn
g
dòn
g
dòn
g
gg
gg
ChếChếđộđộ mởmở trêntrên tậptập tintin vănvănbảnbản
“r”“r” :: đ
ọ
cđ
ọ
c
((
t
ập
t
ập
tintin
p
hải
p
hảicócó trêntrên đĩađĩa
))
ọọ
((
ậpập
pp
))
“w”“w” :: ghighi ((ghighi đèđèlênlên tậptập tintin cũcũ hoặchoặctạotạomớimớinếunếutậptập tintin
khôngkhông cócó trêntrên đĩađĩa))
“a”“a” :: ghighi nốinốivàovào cuốicuốitậptập tintin
“r+”“r+” :: đọcđọc//
g
hi
g
hi Tậ
p
Tậ
p
tintin
p
hải
p
hảicócó trêntrên đĩađĩa
gg
pp
pp
“a+”“a+” :: đọcđọc,, ghighi vàovào cuốicuốitậptậptintin TạoTạomớimớitậptậptintin nếunếutậptập
tintin chưachưacócó trêntrên đĩađĩa
t tftf tt tftf t
ge
t
c, pu
t
c,
f
ge
t
c,
f
pu
t
cge
t
c, pu
t
c,
f
ge
t
c,
f
pu
t
c
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
.
intint getcgetc ( FILE *( FILE *fpfp ););
getcgetc trảtrả vềvề kýký tựtựđọcđọc đượcđượchoặ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
.
p
utc
p
utc: :
g
hi
g
hi k
ý
k
ý
t
ự
t
ự
rara t
ập
t
ập
tin.tin.
pp
gg
ýý
ựự
ậpập
intint putcputc ( ( intint Ch, FILE * Ch, FILE * fpfp ););
putcputc 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
Ví d 1t()đ hí đế khi E tVí d 1t()đ hí đế khi E t
Ví
d
ụ
1
: ge
t
c
()
đ
ọc p
hí
m
đế
n
khi
E
n
t
er
Ví
d
ụ
1
: ge
t
c
()
đ
ọc p
hí
m
đế
n
khi
E
n
t
er
1.1. #include#include <<stdiostdio hh>>
2.2. #include#include <<conioconio hh>>
3.3. #include#include <<stdlibstdlib hh>>
idid
i()i()
4.4. vo
id
vo
id
ma
i
n
()
ma
i
n
()
5.5. {{FILEFILE **fpfp;;
6.6.
charchar
filename[filename[
6767
],],
chch
;;
6.6.
charchar
filename[filename[
6767
],],
chch
;;
7.7. printfprintf (( “Filename“Filename::““));;
8.8. getsgets (filename)(filename);;
9.9. ifif ((((fpfp == fopenfopen (filename,(filename, “w”“w” )))) ==== NULLNULL ))//// mởmở tậptập tintin mớimới đểđể
ghighi
1010
{{
printfprintf
((
“
Create
“
Create
filefile
errorerror
\\
n
”
)n
”
)
;;
exitexit
((
11
))
;;
}}
10
.
10
.
{{
printfprintf
((
CreateCreate
filefile
errorerror
\\
n)n)
;;
exitexit
((
11
))
;;
}}
11.11. whilewhile (((( chch == getchegetche()() ))!=!= ‘‘\\r’r’ ))//// đọcđọcchocho đếnđến khikhi gặpgặpENTERENTER
12.12. putcputc ((fpfp ));;
13.13. fclosefclose ((fpfp ));;
14.14. }}
Ví d
ụ
2:
p
utc
()
in n
ộ
i dun
g
t
ập
tin văn Ví d
ụ
2:
p
utc
()
in n
ộ
i dun
g
t
ập
tin văn
ụ p() ộ g ậpụ p() ộ g ập
bản ra màn hìnhbản ra màn hình
11
#include <#include <
stdio hstdio h
>>
1
.
1
.
#include
<#include
<
stdio
.
hstdio
.
h
>>
2.2. #include <#include <conio.hconio.h>>
3.3. #include <#include <stdlib.hstdlib.h>>
4.4. void main()void main()
5.5. { FILE * { FILE * fpfp;;
6.6. char filename[67], char char filename[67], char chch;;
7.7. printfprintf ( “Filename: “ );( “Filename: “ );
88
gets (filename);gets (filename);
8
.
8
.
gets
(filename);gets
(filename);
9.9. if ((if ((fpfp = = fopenfopen (filename, “r” )) == NULL ) // (filename, “r” )) == NULL ) // mởmở tậptập tin tin mớimới đểđể đọcđọc
10.10.
{
{
p
rintf
p
rintf
(
“O
p
en file error
(
“O
p
en file error
\\
n”
);
exit
(
1
);
}
n”
);
exit
(
1
);
}
{{
pp
(p(p
); ( ); }); ( ); }
11.11. while (( while (( chch = = getcgetc ( ( fpfp ) ) != EOF ) // ) ) != EOF ) // đọcđọcchocho đếnđếnhếthếttậptập tintin
12.12. printfprintf ( “%c”, ( “%c”, chch ););
13.13. fclosefclose ( ( fpfp ););
14.14. }}
Ví d
ụ
3: Đếm số từ tron
g
t
ập
tin văn Ví d
ụ
3: Đếm số từ tron
g
t
ập
tin văn
ụ g ậpụ g ập
bản.bản.
1.1. #include#include <stdio<stdio h>h>
2.2. #include#include <conio<conio h>h>
3.3. #include#include <stdlib<stdlib h>h>
4.4. voidvoid main()main()
5.5. {{FILEFILE **fpfp;;
6.6. charchar filename[filename[6767],], charchar chch;;
77
intint
countcount
==
00
iswordisword
==
00
;;
7
.
7
.
intint
countcount
==
00
,,
iswordisword
==
00
;;
8.8.
p
rintf
p
rintf
((
“Filename“Filename::““
))
;;
g
ets
g
ets
(
filename
)(
filename
)
;;
pp
((
))
;;
gg
()()
;;
9.9. ifif ((fp((fp == fopenfopen (filename,(filename, “r”“r” )))) ==== NULLNULL ))//// mởmở tậptập tintin mớimới đểđể đọcđọc
10.10. {{printfprintf ((“Open“Open filefile errorerror \\n”)n”);;exitexit ((11));;}}
1111
whilewhile
((((
chch
==
getcgetc
((
fpfp
))
))
!=!=
EOFEOF
))
////
đọcđọc
chocho
đếnđến
hếthết
tậptập
tintin
11
.
11
.
whilewhile
((((
chch
==
getcgetc
((
fpfp
))
))
!=!=
EOFEOF
))
////
đọcđọc
chocho
đếnđến
hếthết
tậptập
tintin
12.12. {{
13.13. ifif
((((
chch >=>= ‘a’‘a’ &&&& chch <=<= ‘z’‘z’
))
||||
((
chch >=>= ‘A’‘A’ &&&& chch <=<= ‘Z’‘Z’
))))
((((
))
||||
((
))))
14.14. iswordisword ==11;;
15.15. ifif (((( chch ==== ‘‘‘‘|||| chch ==== ‘‘\\n’n’ |||| chch ==== ‘‘\\t’t’ ))&&&& iswordisword ))
16.16. {{ countcount ++++;;iswor
d
iswor
d
==00;;}}
17.17. }}
18.18. printfprintf ((“Number“Number ofof wordword::%%dd\\n”,n”, count)count);;
19.19. fclosefclose
((
f
p
f
p
))
;;
((
pp
))
;;
20.20. }}
ft()ft()
f
ge
t
s
()
f
ge
t
s
()
f
g
etsf
g
ets: : đọcđọcchuỗichuỗik
ý
k
ý
t
ự
t
ự
t
ừ
t
ừ
tậ
p
tậ
p
tin.tin.
gg
ýý
pp
char * char * fgetsfgets ( char *( char *StrStr, , intint NumOfCharNumOfChar, FILE *, FILE *fpfp ););
fgetsfgets đọcđọc cáccác kýký tựtự trongtrong tậptập tin tin chocho đếnđến khikhi gặpgặpmộtmột trongtrong
cáccác
điềuđiều
kiệnkiện
::
cáccác
điềuđiều
kiệnkiện
::
EOFEOF
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ặphaihai điềuđiều
kiệnkiện
trêntrên
kiệnkiệ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ếuEOF EOF hoặchoặccócó lỗilỗi khikhi đọcđọc
ft()ft()
f
pu
t
s
()f
pu
t
s
()
ftft
hihi
h ỗih ỗi
kýký
tt
tậtậ
titi
f
pu
t
s
f
pu
t
s: : g
hi
g
hi
c
h
u
ỗi
c
h
u
ỗi
kýký
tựtự
rara
tậ
p
tậ
p
ti
n.
ti
n.
intint
fputsfputs
( const char
*
( const char
*
StrStr
,FILE
*
,FILE
*
fpfp
););
intint
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
Hà hé tậ ti ă bảHà hé tậ ti ă bả
Hà
m c
hé
p
tậ
p
ti
n v
ă
n
bả
n
Hà
m c
hé
p
tậ
p
ti
n v
ă
n
bả
n
CóCó
tt
áá
thth
iệiệ
CóCó
t
rong
t
rong c
á
cc
á
c
thưthư
v
iệ
nv
iệ
n
#include
<
#include
<
stdio.hstdio.h
>>
#include
#include
stdio.hstdio.h
#include <#include <string.hstring.h>>
/*/* ViếtViếtchươ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
f f() f f() f i tf() ffl h()f f() f f() f i tf() ffl h()
f
eo
f()
;
f
scan
f()
,
f
pr
i
n
tf()
;
ffl
us
h()f
eo
f()
;
f
scan
f()
,
f
pr
i
n
tf()
;
ffl
us
h()
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)
.
intint feoffeof (FILE *(FILE *fpfp ););
fprintffprintf: :
intint fprintffprintf ( FILE *( FILE *fpfp, const char * Format, );, const char * Format, );
fscanffscanf: :
intint fscanffscanf
(
FILE *
(
FILE *f
p
f
p
,
const char * Format
,
);,
const char * Format
,
);
((
pp
,,);,,);
fflushfflush: : làmlàm sạchsạch vùngvùng đệmđệmcủacủatậptập tintin
ii
ffl hffl h
(FILE*(FILE*
ff
))
i
nt
i
nt
ffl
us
hffl
us
h
(
FILE
*
(
FILE
*
f
p
f
p
)
;
)
;
Tậ ti Nhị hâTậ ti Nhị hâ
Tậ
p
ti
n
Nhị
p
hâ
n
Tậ
p
ti
n
Nhị
p
hâ
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ậ
p
Tậ
p
ti
n
ti
n n
hị
n
hị
phâ
n
phâ
n
làlà
m
ột
m
ột
c
h
u
ỗi
c
h
u
ỗi
c
á
cc
á
c
kýký
tựtự
, ,
khô
ng
khô
ng
phâ
n
phâ
n
biệtbiệt
kýký tựtự in in đượcđượchay 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ưutrữtrữ cáccác cấucấutrúctrúc
((
structstruct
))
hoặchoặc
unionunion
((
structstruct
)
)
hoặchoặc
union
.
union
.
KhaiKhai
báobáo
::
Khai
Khai
báobáo
::
FILE * FILE * f
p
f
p
;;
pp
Tru
y
Tru
y
xu
ấ
txu
ấ
tt
ập
t
ập
tin tin nh
ị
nh
ị
p
hân
p
hân theotheo kh
ố
ikh
ố
id
ữ
d
ữ
li
ệ
uli
ệ
unh
ị
nh
ị
p
hân
p
hân
yy
ậpập
ịị
pp
ệệ
ịị
pp