Download as pdf or txt
Download as pdf or txt
You are on page 1of 48

B mn Cng ngh phn mm

Khoa Cng ngh thng tin


Trng i hc Khoa hc T nhin

K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

TP TIN

1
&
VC
BB
Ni dung

1 Khi nim dng (stream)

2 Khi nim v phn loi tp tin

3 Cc thao tc x l cn bn

4 Mt s hm qun l tp tin

Tp tin
2
&
VC
BB
Nhp xut

Khi nim
C lu d liu (bin, mng, cu trc, ) trong
b nh RAM.
D liu c np vo RAM v gi ra ngoi
chng trnh thng qua cc thit b (device)
Thit b nhp (input device): bn phm, con chut
Thit b xut (output device): mn hnh, my in
Thit b va nhp va xut: tp tin
Cc thit b u thc hin mi x l thng
qua cc dng (stream).
Tp tin
3
&
VC
BB
Stream (dng)

Khi nim
L mi trng trung gian giao tip (nhn/
gi thng tin) gia chng trnh v thit b.
Mun nhn/gi thng tin cho mt thit b
ta s gi thng tin cho stream ni vi thit b
(c lp thit b).
Stream l dy byte d liu
Chy vo chng trnh gi l stream nhp.
Chy ra chng trnh gi l stream xut.

Tp tin
4
&
VC
BB
Stream (dng)

Phn loi
Stream vn bn (text)
Ch cha cc k t.
T chc thnh tng dng, mi dng ti a 255 k
t, kt thc bi k t cui dng \0 hoc k t
sang dng mi \n.
Stream nh phn (binary)
Cha cc byte.
c c v ghi chnh xc tng byte.
X l d liu bt k, k c d liu vn bn.
c s dng ch yu vi cc tp tin trn a.
Tp tin
5
&
VC
BB
Stream (dng)

Cc stream chun nh ngha sn


Tn Stream Thit b tng ng
stdin Nhp chun Bi phm
stdout Xut chun Mn hnh
stderr Li chun Mn hnh
stdprn (MS-DOS) In chun My in (LPT1:)
stdaux (MS-DOS) Ph chun Cng ni tip COM 1:

V d (hm fprintf xut ra stream xc nh)


Xut ra mn hnh: fprintf(stdout, Hello);
Xut ra my in: fprintf(stdprn, Hello);
Xut ra thit b bo li: fprintf(stderr, Hello);
Xut ra tp tin (stream fp): fprintf(fp, Hello);
Tp tin
6
&
VC
BB
Tp tin

Nhu cu
D liu gii hn v c lu tr tm thi
Nhp: g t bn phm.
Xut: hin th trn mn hnh.
Lu tr d liu: trong b nh RAM.
Mt thi gian, khng gii quyt c bi
ton vi s d liu ln.
Cn mt thit b lu tr sao cho d liu vn
cn khi kt thc chng trnh, c th s dng
nhiu ln v kch thc khng hn ch.
Tp tin
7
&
VC
BB
Tp tin

Khi nim
Tp hp thng tin (d liu) c t chc theo
mt dng no vi mt tn xc nh.
Mt dy byte lin tc ( gc lu tr).
c lu tr trong cc thit b lu tr ngoi
nh a mm, a cng, USB
Vn tn ti khi chng trnh kt thc.
Kch thc khng hn ch (ty vo thit b lu tr)
Cho php c d liu (thit b nhp) v ghi
d liu (thit b xut).
Tp tin
8
&
VC
BB
Tp tin

Phn loi
Theo ngi s dng: quan tm n ni dung
tp tin nn s phn loi theo phn m rng
.EXE, .COM, .CPP, .DOC, .PPT,
Theo ngi lp trnh: t to cc stream tng
minh kt ni vi tp tin xc nh nn s
phn loi theo cch s dng stream trong C
tp tin kiu vn bn (ng vi stream
vn bn) v tp tin kiu nh phn (ng vi
stream nh phn).
Tp tin
9
&
VC
BB
Phn loi tp tin

Tp tin kiu vn bn (stream vn bn)


Dy cc dng k tip nhau.
Mi dng di ti a 255 k t v kt thc
bng k hiu cui dng (end_of_line).
Dng khng phi l mt chui v khng c
kt thc bi k t \0.
Khi ghi \n c chuyn thnh cp k t CR
(v u dng, m ASCII 13) v LF (qua dng,
m ASCII 10).
Khi c th cp CR-LF c chuyn thnh \n.
Tp tin
10
&
VC
BB
Phn loi tp tin

Tp tin kiu nh phn (stream nh phn)


D liu c c v ghi mt cch chnh xc,
khng c s chuyn i no c.
K t kt thc chui \0 v end_of_line khng
c ngha l cui chui v cui dng m
c x l nh mi k t khc.

Tp tin
11
&
VC
BB
Quy tc t tn tp tin

Khng bt buc.
Thng c 3 k t.
Tn
(name) . M rng
(extension) Thng do chng
trnh ng dng to
tp tin t t

Bt buc phi c.
H iu hnh MS-DOS: di ti a 8 k t.
H iu hnh Windows: di ti a 128 k t.
Gm cc k t A n Z, s 0 n 9, k t khc
nh #, $, %, ~, ^, @, (, ), !, _, khong trng.

Tp tin
12
&
VC
BB
nh v tp tin

ng dn
Ch n mt tp tin khng nm trong th mc
hin hnh. V d: c:\data\list.txt ch tp tin
list.txt nm trong th mc data ca a C.
Trong chng trnh, ng dn ny c ghi
trong chui nh sau: c:\\data\\list.txt
Du \ biu th k t iu khin nn th
hin n ta phi thm mt du \ trc.
Nhng nu chng trnh yu cu nhp ng
dn t bn phm th ch nhp mt du \.
Tp tin
13
&
VC
BB
Quy trnh thao tc vi tp tin

1. M tp tin: to mt stream ni kt vi tp tin


cn m, stream c qun l bi bin con tr
n cu trc FILE
Cu trc c nh sn trong STDIO.H
Cc thnh phn ca cu trc ny c dng
trong cc thao tc x l tp tin.
2. S dng tp tin (sau khi m c tp tin)
c d liu t tp tin a vo chng trnh.
Ghi d liu t chng trnh ln tp tin.
3. ng tp tin (sau khi s dng xong).
Tp tin
14
&
VC
BB
Hm m tp tin

FILE *fopen(const char *filename, const char *mode)

M tp tin c tn (ng dn) l cha trong


filename vi kiu m mode (xem bng).

Thnh cng: con tr kiu cu trc FILE


Tht bi: NULL (sai quy tc t tn tp
tin, khng tm thy a, khng tm thy
th mc, m tp tin cha c c, )
FILE* fp = fopen(taptin.txt, rt);
if (fp == NULL)
printf(Khong mo duoc tap tin!);

Tp tin
15
&
VC
BB
i s m tp tin (mode)

i s ngha
b M tp tin kiu nh phn (binary)
t M tp tin kiu vn bn (text) (mc nh)
r M tp tin ch c d liu t tp tin. Tr v
NULL nu khng tm thy tp tin.
w M tp tin ch ghi d liu vo tp tin. Tp
tin s c to nu cha c, ngc li d liu
trc s b xa ht.
a M tp tin ch thm (append) d liu vo
cui tp tin. Tp tin s c to nu cha c.
r+ Ging mode r v b sung thm tnh nng ghi
d liu v tp tin s c to nu cha c.
w+ Ging mode w v b sung thm tnh nng c.
a+ Ging mode a v b sung thm tnh nng c.

Tp tin
16
&
VC
BB
c v ghi d liu (stdio.h)

Thc hin c/ghi d liu theo cc cch sau:


Nhp/xut theo nh dng
Hm: fscanf, fprintf
Ch dng vi tp tin kiu vn bn.
Nhp/xut tng k t hay dng ln tp tin
Hm: getc, fgetc, fgets, putc, fputs
Ch nn dng vi kiu vn bn.
c/ghi trc tip d liu t b nh ln tp tin
Hm: fread, fwrite
Ch dng vi tp tin kiu nh phn.
Tp tin
17
&
VC
BB
Hm xut theo nh dng

int fprintf(FILE *fp, char *fnt, )

Ghi d liu c chui nh dng fnt (ging


hm printf) vo stream fp.
Nu fp l stdout th hm ging printf.
Thnh cng: tr v s byte ghi c.
Tht bi: tr v EOF (c gi tr l -1, c
nh ngha trong STDIO.H, s dng trong
tp tin c kiu vn bn)
int i = 2912; int c = P; float f = 17.06;
FILE* fp = fopen(taptin.txt, wt);
if (fp != NULL)
fprintf(fp, %d %c %.2f\n, i, c, f);

Tp tin
18
&
VC
BB
Hm nhp theo nh dng

int fscanf(FILE *fp, char *fnt, )

c d liu c chui nh dng fnt (ging


hm scanf) t stream fp.
Nu fp l stdin th hm ging printf.

Thnh cng: tr v s thnh phn c v


lu tr c.
Tht bi: tr v EOF.
int i;
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
fscanf(fp, %d, &i);

Tp tin
19
&
VC
BB
Hm nhp theo nh dng

V d
Mt tp tin cha nhiu dng, mi dng l
thng tin mi sinh vin theo nh dng sau:
<MSSV>-<Tn>(<Phi>)tab<NTNS>tab<TB>
V d: 0312078-H. P. Trang(Nu) 17/06/85 8.5
c chui thng tin phc hp
%[chui]: c cho n khi khng gp k t
no trong chui th dng.
%[^chui]: c cho n khi gp mt trong
nhng k t trong chui th dng.
Tp tin
20
&
VC
BB
Hm Tch 2 Mng

struct SINHVIEN {
char MSSV[8]; // 0312078
char HoTen[30]; // H. P. Trang
char GioiTinh[4]; // Nu
char NTNS[9]; // 17/06/85
float DiemTB; // 8.5
};
void main() {
SINHVIEN sv;
FILE *fp = fopen(dssv.txt, rt);
if (fp != NULL) {
fscanf(fp, %[^-]-%[^(](%[^)])\t%[^\t]
\t%f, &sv.MSSV, &sv.HoTen,
&sv.GioiTinh, &sv.NTNS, &sv.DiemTB);
fclose(fp);
}
} 21
Tp tin
&
VC
BB
Hm nhp k t

int getc(FILE *fp) v int fgetc(FILE *fp)

c mt k t t stream fp.
getc l macro cn fgetc l phin bn hm
ca macro getc.
Thnh cng: tr v k t c c sau khi
chuyn sang s nguyn khng du.
Tht bi: tr v EOF khi kt thc stream fp
hoc gp li.
char ch;
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
ch = getc(fp); // ch = fgetc(fp);

Tp tin
22
&
VC
BB
Hm nhp chui

Int fgets(char *str, int n, FILE *fp)

c mt dy k t t stream fp vo vng
nh str, kt thc khi n-1 k t hoc gp
k t xung dng.

Thnh cng: tr v str.


Tht bi: tr v NULL khi gp li hoc gp
k t EOF.
char s[20];
FILE* fp = fopen(taptin.txt, rt);
if (fp != NULL)
fgets(s, 20, fp);

Tp tin
23
&
VC
BB
Hm xut k t

int putc(int ch, FILE *fp) v int fputc(in ch, FILE *fp)

Ghi k t ch vo stream fp.


putc l macro cn fputc l phin bn hm
ca macro putc.

Thnh cng: tr v k t ch.


Tht bi: tr v EOF.

FILE* fp = fopen(taptin.txt, rt);


if (fp != NULL)
putc(a, fp); // hoc fputc(a, fp);

Tp tin
24
&
VC
BB
Hm xut chui

int fputs(const char *str, FILE *fp)

Ghi chui k t str vo stream fp. Nu fp l


stdout th fputs ging hm puts, nhng puts
ghi k t xung dng.

Thnh cng: tr v k t cui cng ghi.


Tht bi: tr v EOF.

char s[] = Ky thuat lap trinh;


FILE* fp = fopen(taptin.txt, wt);
if (fp != NULL)
fputs(s, fp);

Tp tin
25
&
VC
BB
Hm xut trc tip

int fwrite(void *buf, int size, int count, FILE *fp)

Ghi count mu tin c kch thc mi mu


tin l size (byte) t vng nh buf vo
stream fp (theo kiu nh phn).

Thnh cng: tr v s lng mu tin


(khng phi s lng byte) ghi.
Tht bi: s lng nh hn count.
int a[] = {1, 2, 3};
FILE* fp = fopen(taptin.dat, wb);
if (fp != NULL)
fwrite(a, sizeof(int), 3, fp);

Tp tin
26
&
VC
BB
Hm nhp trc tip

int fread(void *buf, int size, int count, FILE *fp)

c count mu tin c kch thc mi mu


tin l size (byte) vo vng nh buf t
stream fp (theo kiu nh phn).
Thnh cng: tr v s lng mu tin
(khng phi s lng byte) tht s c.
Tht bi: s lng nh hn count khi kt
thc stream fp hoc gp li.
int a[5];
FILE* fp = fopen(taptin.dat, wb);
if (fp != NULL)
fread(a, sizeof(int), 3, fp);

Tp tin
27
&
VC
BB
Hm ng tp tin xc nh

int fclose(FILE *fp)

ng stream fp.
D liu trong stream fp s c vt (ghi
ht ln a) trc khi ng.

Thnh cng: tr v 0.
Tht bi: tr v EOF.

FILE* fp = fopen(taptin.txt, rt);



fclose(fp);

Tp tin
28
&
VC
BB
Hm ng tt c stream

int fcloseall()

ng tt c stream ang c m ngoi tr


cc stream chun stdin, stdout, stdprn,
stderr, stdaux.
Nn ng tng stream thay v ng tt c.
Thnh cng: tr v s lng stream c
ng.
Tht bi: tr v EOF.
FILE* fp1 = fopen(taptin1.txt, rt);
FILE* fp2 = fopen(taptin2.txt, wt);

fcloseall();

Tp tin
29
&
VC
BB
Vt d liu trong stream

Khi chng trnh kt thc, cc stream ang m


s c vt (flush) v ng li. Tuy nhin, ta
nn ng mt cc tng minh cc stream sau
khi s dng xong (nht l cc stream tp tin)
trnh cc s c xy ra trc khi chng trnh
kt thc bnh thng.
Ta c th vt d liu trong stream m khng
cn ng stream bng mt trong hai hm:
Vt stream fp xc nh: int fflush(FILE *fp);
Vt tt c stream ang m: int flushall();
Tp tin
30
&
VC
BB
Con tr ch v (position indicator)

Khi nim
c to t ng khi m tp tin.
Xc nh ni din ra vic c/ghi trong tp tin
V tr con tr ch v
Khi tp tin cha m: u tp tin (gi tr 0).
Khi m tp tin:
cui tp tin khi m chn (mode a hay a+)
u tp tin (hay gi tr 0) khi m vi cc mode
khc (w, w+, r, r+).

Tp tin
31
&
VC
BB
Truy xut tun t & ngu nhin

Truy xut tun t (sequentially access)


Phi c/ghi d liu t v tr con tr ch v n
v tr n-1 trc khi c d liu ti v tr n.
Khng cn quan tm n con tr ch v do con
tr ch v t ng chuyn sang v tr k tip
sau thao tc c/ghi d liu.
Truy xut ngu nhin (random access)
C th c/ghi ti v tr bt k trong tp tin
m khng cn phi c/ghi ton b d liu
trc quan tm n con tr ch v.
Tp tin
32
&
VC
BB
Hm t li v tr con tr ch v

void rewind(FILE *fp)

t li v tr con tr ch v v u (byte 0)
tp tin fp.

Khng

FILE* fp = fopen(taptin.txt, w+);


fprintf(fp, 0123456789);
rewind(fp);
fprintf(fp, *****);

Tp tin
33
&
VC
BB
Hm ti nh v con tr ch v

int fseek(FILE *fp, long offset, ing origin)

t v tr con tr ch v trong stream fp vi


v tr offset so vi ct mc origin (SEEK_SET
hay 0: u tp tin; SEEK_CUR hay 1: v tr
hin ti; SEEK_END hay 2: cui tp tin)

Thnh cng: tr v 0.
Tht bi: tr v gi tr khc 0.

FILE* fp = fopen(taptin.txt, w+);


fseek(fp, 0L, SEEK_SET); // rewind(fp);
fseek(fp, 0L, SEEK_END); // cui tp tin
fseek(fp, -2L, SEEK_CUR);// li li 2 v tr

Tp tin
34
&
VC
BB
Hm xc nh v tr con tr ch v

long ftell(FILE *fp)

Hm tr v v tr hin ti ca con tr ch v
(tnh t v tr u tin ca tp tin, tc l 0)
ca stream fp.

Thnh cng: tr v v tr hin ti ca con


tr ch v.
Tht bi: tr v -1L.
FILE* fp = fopen(taptin.txt, rb);
fseek(fp, 0L, SEEK_END);
long size = ftell(fp);
printf(Kich thuoc tap tin la %ld\n, size);

Tp tin
35
&
VC
BB
Du hiu kt thc tp tin

Khi bit kch thc tp tin


S dng fwrite lu n mu tin
kch thc = n * sizeof(1 mu tin);
S dng hm fseek kt hp hm ftell
Khi cha bit kch thc tp tin
Hng s EOF (=-1) (ch cho tp tin vn bn)
while ((c = fgetc(fp)) != EOF)
Hm int feof(FILE *fp) (cho c 2 kiu tp tin)
tr v s 0 nu cha n cui tp tin
tr v s khc 0 nu n cui tp tin.
Tp tin
36
&
VC
BB
Cc hm qun l tp tin

Hm nhp xut tp tin (File I/O function) l cc


cp phn trc
M v ng tp tin: fopen, fclose
Nhp/Xut tp tin:
Theo nh dng: fprintf, fscanf
Tng k t hay chui: fputc, fputs, fgetc, fgets
Trc tip t b nh: fwrite, fread
Hm qun l tp tin (File-Management function)
Xa tp tin: remove
i tn tp tin: rename
Tp tin
37
&
VC
BB
Hm xa tp tin

int remove(const char *filename)

Xa tp tin xc nh bi filename.

Thnh cng: tr v 0.
Tht bi: tr v -1.

if (remove(c:\\vc.txt) == 0)
printf(Tap tin vc.txt da bi xoa!);
else
printf(Ko xoa duoc tap tin vc.txt!);

Tp tin
38
&
VC
BB
Hm i tn tp tin

int rename(const char *oldname, const char *newname)

i tn tp tin oldname thnh newname.


Hai tp tin phi cng a nhng khng
cn thit phi cng th mc (c th s
dng di chuyn hay sao chp tp tin).

Thnh cng: tr v 0.
Tht bi: tr v -1.

if (rename(c:\\a.txt, c:\\BT\b.cpp) == 0)
printf(Doi ten tap tin thanh cong);
else
printf(Doi ten tap tin that bai);

Tp tin
39
&
VC
BB
Bi tp l thuyt

Bi 1: S khc nhau gia stream kiu vn bn


v stream kiu nh phn?

Bi 2: Cn phi lm g trc khi mun truy xut


tp tin?

Tp tin
40
&
VC
BB
Bi tp l thuyt

Bi 3: Khi m tp tin bng fopen, ta cn phi


xc nh thng tin no v hm s tr v ci g?

Bi 4: Ba phng php truy xut tp tin?


1.
2.
3.
Tp tin
41
&
VC
BB
Bi tp l thuyt

Bi 5: Hai phng php c thng tin t tp


tin l g?
1.
2.
Bi 6: Gi tr ca EOF?

Bi 7: Ta dng hng k hiu EOF lm g?

Tp tin
42
&
VC
BB
Bi tp l thuyt

Bi 8: Cch xc nh cui tp tin trong kiu vn


bn v kiu nh phn?

Bi 9: Con tr ch v l g v cch thay i n?


Tp tin
43
&
VC
BB
Bi tp l thuyt

Bi 10: Nu m mt tp tin cha c (bng mode


w), cho bit gi tr ca con tr ch v lc u?

Bi 11: Vit lnh ng tt c cc stream tp tin.



Bi 12: Trnh by hai cch khc nhau chuyn
con tr ch v v u tp tin fp.
1.
2.
Tp tin
44
&
VC
BB
Bi tp l thuyt

Bi 13: on chng trnh sau c sai khng?


void main()
{
FILE *fp;
int c;
if ((fp = fopen(abc.xyz, rb)) == NULL)
printf(Khong mo duoc tap abc.xyz\n);
else
{
while ((c = fgetc(fp)) != EOF)
fprintf(stdout, %c, c);
fclose(fp);
}
}

Tp tin
45
&
VC
BB
Bi tp thc hnh

Bi 14: Vit chng trnh ghi 3 s nguyn a, b, c


c nhp t bn phm vo mt tp tin.
Bi 15: Vit chng trnh c 3 s nguyn a, b,
c t mt tp tin, sau gii phng trnh ax2+
bx + c = 0 ri ghi kt qu vo mt tp tin khc.
Bi 16: Vit chng trnh c n s nguyn t
mt tp tin cho trc, sau sp xp tng dn
ri ghi kt qu vo 1 tp tin khc. V d:
4 4
2 5 1 4 1 2 4 5
Tp tin
46
&
VC
BB
Bi tp thc hnh

Bi 17: Vit chng trnh ghi cc dng vn bn


c nhp t bn phm ln tp tin.
Bi 18: Vit chng trnh in ni dung mt tp tin
ln mn hnh.
Bi 19: Vit chng trnh m s k t ch ci
ca tp tin v xut kt qu ra mt tp tin khc.
Bi 20: Vit chng trnh m s t ca tp tin
v xut kt qu ra mt tp tin khc.
Bi 21: Vit chng trnh m s ln lp li ca
mt t trong mt tp tin.
Tp tin
47
&
VC
BB
Bi tp thc hnh

Bi 22: Vit chng trnh m tp tin vn bn


c trn a, sao chp n thnh mt tp tin vn
bn mi vi iu kin l cc ch thng i
thnh ch hoa, tt c cc k t khc khng i.
Bi 23: Vit chng trnh ghp 2 tp tin vn
bn, ni dung tp tin th hai c ghp sau tp
tin th nht.
Bi 24: Vit sao sao chp mt tp tin cho trc.
Bi 25: Vit chng trnh ghi mt danh sch cu
trc xung tp tin sau c ln kim tra li.
Tp tin
48

You might also like