
Lập trình nâng cao -Chương 09 -Ngô Công Thắng 1
Chương 9. Kiểu dữ liệu tệp
I.Giớithiệuvềtệp
II.Tệpnhịphân
III.Tệpvănbản
IV.Truynhậptrựctiếpcácphầntửcủatệp
V.Tệpkhôngxác địnhkiểudữliệu
Lập trình nâng cao -Chương 09 -Ngô Công Thắng 2
I. Giới thiệu về tệp
1.Kháiniệmvềtệp
2.Cấutrúccủatệp
3.Phânloạitệp
4.Khaibáotệp

Lập trình nâng cao -Chương 09 -Ngô Công Thắng 3
1. Khái niệm về tệp
lKiểutệpbaogồmmộttậphữuhạncác
phầntửcócùngkiểudữliệuđượclưutrữ
trênbộnhớngoài.
lSốphầntửcủatệpkhôngcầnxác địnhkhi
khaibáobiếntệp.
lCácphầntửcủatệpđượclưutrữtrênbộ
nhớngoài. Đâylà đặcđiểmkhácvớitất
cảcáckiểudữliệukhác.
Lập trình nâng cao -Chương 09 -Ngô Công Thắng 4
2. Cấu trúc của tệp
lCácphầntửcủatệpđượcsắpxếpthànhmột
dãycácbyteliêntiếpnhau.Sauphầntửdữliệu
cuốicùnglàphầntửEOF.Phầntửnàykhông
phảilàdữliệumàlàmãkếtthúctệp.
EOF45 12 20 25 15 72 81 8
0 2 4 6 8 10 12 14 16
Vị trí byte
Con trỏ
chỉ vị
1 3 5 7 9 11 13 15

Lập trình nâng cao -Chương 09 -Ngô Công Thắng 5
3. Phân loại tệp
lDựavàocáchlưutrữdữliệutrêntệptacó
cácloạitệpsau:
§Tệpnhịphân(binary):Dữliệughiratệpnhị
phâncódạngcácbytenhịphângiốngnhư
trongbộnhớ.
§Tệpvănbản(text):Dữliệuđượcghiratệp
thànhcáckýtựtrongbảngmãASCII.Trên
tệpvănbảncómãxuốngdònggồm2kýtự
LF(mã10)vàCR(mã13).
Lập trình nâng cao -Chương 09 -Ngô Công Thắng 6
4. Khai báo tệp
lKiểutệpđãđượctrìnhbiêndịch định
nghĩavớitênchuẩnlàFILE.
lKhaibáotệptakhaibáobiếncontrỏtrỏ
tớikiểuFILE.
Vídụ:FILE*f;
lContrỏtệpsẽtrỏtớivùngnhớchứacác
thôngtinvềtệptrênbộnhớngoài.

Lập trình nâng cao -Chương 09 -Ngô Công Thắng 7
II. Tệp nhị phân
1.Ghidữliệuratệpnhịphân
2. Đọcdữliệutừtệpnhịphân
Lập trình nâng cao -Chương 09 -Ngô Công Thắng 8
1. Ghi dữ liệu ra tệp nhị phân
lB1:Mởtệpđể ghibằnghàmfopen()
fp = fopen(Tên tệp, Kiểu truy nhập);
trong đó:+)fplàcontrỏtệpđượckhai
báotrỏtớikiểuFILE;
+)Têntệpcóthểlàhằngxâuhoặcbiến
xâu.Trongtêntệpcóthểcó đườngdẫn.
+Kiểutruynhậptệplàhằngxâudiễntả
cáchtruynhậpvàotệp.

Lập trình nâng cao -Chương 09 -Ngô Công Thắng 9
Các kiểu truy nhập tệp nhị phân
KiểuÝ nghĩa
“wb” Mởtệpmớiđể ghitheokiểunhịphân.Nếutệpđãcónósẽbị
xóa.
“rb” Mởtệpmớiđểđọctheokiểunhịphân.Nếutệpkhôngcósẽ
sinhralỗi.
“ab” Mởtệptheokiểunhịphân để ghibổsungvàocuốitệp.Nếu
tệpchưacósẽtạotệpmới.
“r+b” Mởtệpmớiđểđọc/ghitheokiểunhịphân.Nếutệpkhôngcó
sẽsinhralỗi.
“w+b” Mởtệpmớiđểđọc/ghitheokiểunhịphân.Nếutệpđãcónósẽ
bịxóa.
“a+b” Mởtệptheokiểunhịphân đểđọc/ghibổsungvàocuốitệp.
Nếutệpchưacósẽtạotệpmới.
Lập trình nâng cao -Chương 09 -Ngô Công Thắng 10
1. Ghi dữ liệu ra tệp nhị phân (tiếp)
lB2:Ghidữliệuratệpbằnghàmfwrite()
fwrite(ptr, size, n, fp);
trong đó:+)ptrlàcontrỏtrỏtớivùngnhớchứacácphầntử
dữliệucầnghi.
+)sizelàkíchthướcphầntửtheobyte.
+)nlàsốphầntửcầnghi.
+)fplàcontrỏtệp.
Nếucólỗikhôngghi được,hàmtrảvề0.Nếukhôngcólỗi
hàmtrảvềsốphầntửghi được.
Vídụ:
FILE*fp=fopen(“songuyen.dat”,”wb”);
inta=200;
fwrite(&a,sizeof(a),1,fp);