LLậập trp trìình vnh vớới ti tậập tinp tin

n Đông Hàà NguyNguyễễn Đông H ĐH KHTN Khoa CNTT –– ĐH KHTN Khoa CNTT

LLậập trp trìình vnh vớới ti tậập tinp tin

(cid:132)(cid:132) DDữữ liliệệu cu củủa chương tr

a chương trìình đư

nh đượợc lưu tr

c lưu trữữ trong b trong bộộ c lưu không đượợc lưu

nh (cáác bic biếến bn bộộ nhnhớớ), ), không đư cho lầần chn chạạy ky kếế titiếếp cp củủa chương tr

a chương trììnhnh

nhnhớớ chchíính (c trtrữữ cho l (cid:132)(cid:132) MMụục đc đíích ch

nhnhằằm đm đểể lưu tr truy xuấất trt trởở llạại khi c truy xu

p tin làà ch chíính cnh củủa via việệc lc lậập trp trìình vnh vớới ti tậập tin l lưu trữữ ddữữ liliệệu vu vàào bo bộộ nhnhớớ phphụụ vvàà n thiếếtt

i khi cầần thi

Phân loạại ti tậập tinp tin Phân lo

p tin văn bảảnn

(cid:132)(cid:132) TTậập tin văn b (cid:132)(cid:132) ccóó ththểể xem n nh DOS hhàành DOS

(cid:132)(cid:132) đưđượợc soc soạạn thn thảảo bo bằằng cng cáác chương tr

xem nộội dung b i dung bằằng lng lệệnh nh type type ccủủa ha hệệ đi điềều u

nh soạạn thn thảảo o

n đơn giảản như Notepad c c chương trìình so a Windows... n như Notepad củủa Windows...

văn bảản đơn gi văn b phân p tin nhịị phân (cid:132)(cid:132) TTậập tin nh không cóó ddạạng văn b (cid:132)(cid:132) không c (cid:132)(cid:132) vvíí ddụụ: t: tậập tin mã th n ASCII ng văn bảản ASCII p tin mã thựực thi trên h c thi trên hệệ đi điềều hu hàành nh

p tin văn bảản phn phứức hc hợợp (.doc), t p (.doc), tậập p

(.exe,.com), tậập tin văn b (.exe,.com), t nh (.jpg) tin hìình nh ảảnh (.jpg) tin h

KKỹỹ thuthuậật lt lậập trp trìình tnh tậập tinp tin

p tin luôn gồồm 3m 3 bư bướớc c

(cid:132)(cid:132) CCáác thao t

p tin đểể chuchuẩẩn bn bịị llààm vim việệcc

c thao táác vc vớới ti tậập tin luôn g nh sau đây:: chchíính sau đây (cid:132)(cid:132) MMởở ttậập tin đ ghi dữữ liliệệuu (cid:132)(cid:132) ĐĐọọc vc vàà ghi d p tin (cid:132)(cid:132) ĐĐóóng tng tậập tin

MMởở ttậập tinp tin

(cid:132)(cid:132) DDùùng hng hààm m fopen

fopen đ đểể mmởở ttậập tin theo c p sau: p tin theo cúú phphááp sau:

FILE *fopen(const char *ten_tap_tin,

const char *tuy_chon);

(cid:132)(cid:132) VVíí ddụụ::

/* Mo tap tin ten la text.txt de ghi */ fopen( “text.txt” , ”wt” );

MMởở ttậập tinp tin

(cid:132)(cid:132) CCáác tc tùùy chy chọọn cn cóó ththểể ccóó: :

rr file đểể đ đọọc, nc, nếếu file ko t u file ko tồồn tn tạại, fopen tr i, fopen trảả vvềề

ww o file mớới, ni, nếếu u

u file ko tồồn tn tạại, ti, tạạo file m ghi, nếếu file ko t lên file cũũ ko cko cầần hn hỏỏii ghi đèè lên file c thêm vàào pho phíía sau file đã t a sau file đã tồồn tn tạạii

aa r+r+ w+w+ a+a+ mmởở file đ NULLNULL mmởở file đ file đểể ghi, n đã tđã tồồn tn tạại, i, ghi đ mmởở file đ mmởở file đ mmởở file đ mmởở file đ file đểể thêm v file đểể đ đọọc vic viếết, t, ghi đ u đã cóó lên phầần dn dữữ liliệệu đã c ghi đèè lên ph file đểể đ đọọc vic viếết, xt, xóóa hoa hoààn ton toààn phn phầần dn dữữ liliệệu cu cũũ file đểể đ đọọc vc vàà thêm v a sau file cũũ thêm vàào pho phíía sau file c

MMởở ttậập tinp tin

(cid:132)(cid:132) MMặặc đc địịnh mnh mởở ttậập tin l p tin nhịị phân, ph

p tin làà ttậập tin văn b phân, phầần tn tùùy chy chọọn phn phảải thêm v

p tin văn bảản,n, đ đểể mmởở i thêm vàào o

ttậập tin nh ký tký tựự ““bb””, t, tứức lc làà ““wbwb””, , ““rbrb””.. (b: binary) .. (b: binary)

n cho thêm ký tựự ““tt”” vvàào pho phầần tn tùùy chy chọọn cho ng đượợc. c.

p tin văn bảản, mn, mặặc dc dùù không ghi c

không ghi cũũng đư

(cid:132)(cid:132) CCóó ththểể thêm ký t ttậập tin văn b (t: text) (t: text)

p tin MMởở ttậập tin

fopen() trtrảả vvềề NULLNULL nnếếu xu xảảy ra l

y ra lỗỗi:i:

p tin không đúúng quy t

(cid:132)(cid:132) HHààm m fopen() (cid:132)(cid:132) SSửử ddụụng tên t (cid:132)(cid:132) MMởở ttậập tin chưa s

ng tên tậập tin không đ p tin chưa sẵẵn sn sààng ng ((đđĩĩa chưa format ng quy tắắcc hưa a chưa format, c, chưa

(cid:132)(cid:132) MMởở ttậập tin không t

đđóóng ng ổổ đ đĩĩa)a)

, luôn phảải i

m tra kếết qut quảả trtrảả vvềề xem c

fopen, luôn ph xem cóó ththựực hic hiệện thn thàành nh

(cid:132)(cid:132) BBấất ct cứứ khi n kikiểểm tra k công hay không công hay không

p tin không tồồn tn tạạii khi nàào so sửử ddụụng hng hààm m fopen

(cid:132)(cid:132) ĐĐọọc cc cáác gic giáá trtrịị ssốố (s(sốố nguyên, th

c, ghi CCáác hc hààm đm đọọc, ghi nguyên, thựực, 1 ký t

c, 1 ký tựự..)..)

int fscanf(FILE *tap_tin,

const char * format [ , argument , ...] );

(cid:132)(cid:132) VVíí ddụụ

/* doc mot so nguyen dua vao bien n tu tap tin duoc dai dien boi con tro ten la fp */ fscanf(fp ,”%d” , &n);

c, ghi CCáác hc hààm đm đọọc, ghi

(cid:132)(cid:132) ĐĐọọc cc cáác gic giáá trtrịị chuchuỗỗi ký t

i ký tựự

char * fgets (char * chuoi, int sokytu ,

FILE * tap_tin);

(cid:132)(cid:132) VVíí ddụụ

/* Doc mot chuoi ky tu chua toi da 20 ky tu tu tap tin duoc dai dien boi con tro fp, dua vao bien chuoi ky tu ten la dong */ fgets(dong,20,fp);

c, ghi CCáác hc hààm đm đọọc, ghi

(cid:132)(cid:132) GhiGhi

int fprintf (FILE * tap_tin,

const char * ma[ , bien , ...] );

(cid:132)(cid:132) VVíí ddụụ

/* ghi mot so nguyen n ten tap tin duoc dai dien boi con tro ten la fp */ fprintf(fp,"%d",n);

TTạạo to tậập tin văn b

p tin văn bảản mn mớớii

fopen() vvớới ti tùùy chy chọọnn ““wtwt””

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c: (cid:132)(cid:132) MMởở ttậập tin b (cid:132)(cid:132) Ghi dGhi dữữ liliệệu lên t (cid:132)(cid:132) ĐĐóóng tng tậập tin b

p tin bằằng hng hààm m fopen() u lên tậập tin b fprintf() p tin bằằng hng hààm m fprintf()

fclose() p tin bằằng hng hààm m fclose()

TTạạo to tậập tin văn b

p tin văn bảản mn mớới i –– vvíí ddụụ

void TaoTapTin() {

FILE* fp; int x = 10; fp = fopen(“test.txt”,”wt”); if(fp != NULL) {

fprintf(fp, “Chao cac ban !\n”); fprintf(fp,"x = %d", x); fclose(fp);

} else

printf(“Khong the tao tap tin”);

}

ĐĐọọc dc dữữ liliệệu tu từừ ttậập tin văn b

p tin văn bảản cn cóó ssẵẵnn

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c: (cid:132)(cid:132) MMởở ttậập tin b (cid:132)(cid:132) GGọọi hi hààmm fscanf() tin vàào bio biếến bn bộộ nhnhớớ tin v

p tin bằằng hng hààm m fopen() fscanf() hayhay fgets() fopen() vvớới ti tùùy chy chọọn n ““rtrt”” fgets() đđểể đ đọọc dc dữữ liliệệu tu từừ ttậập p

(cid:132)(cid:132) ĐĐóóng tng tậập tin b (cid:132)(cid:132) DDùùng hng hààm m fscanf

fscanf đ đểể đ đọọc sc sốố nguyên, s

nguyên, sốố ththựực c fgets đ đểể đ đọọc nguyên m

c nguyên mộột t

m tra đã đếến cun cuốối ti tậập tin hay chưa

p tin hay chưa, d, dùùng ng

hay ký tựự; d; dùùng hng hààm m fgets hay ký t dòng củủa ta tậập tinp tin dòng c (cid:132)(cid:132) ĐĐểể kikiểểm tra đã đ feof hhààm m feof

fclose() p tin bằằng hng hààm m fclose()

ĐĐọọc dc dữữ liliệệu tu từừ ttậập tin văn b

p tin văn bảản n –– vvíí ddụụ

#define MAXCHAR 255 void DocTapTin() {

FILE* fp; char dong[MAXCHAR+1]; fp = fopen(“test.txt”,”rt”); if(fp != NULL) {

while(!feof(fp)) /* chua cuoi tt*/ {

if(fgets(dong,MAXCHAR,fp)!=NULL)

printf(“%s”,dong);

} fclose(fp);

} else

printf(“Khong the mo tap tin”);

}

#define MAXCHAR 255 void DocTapTin() {

FILE* fp; char dong[MAXCHAR+1]; fp = fopen(“test.txt”,”rt”); if(fp != NULL) {

while(!feof(fp)) /* chua cuoi tt*/ {

if(fgets(dong,MAXCHAR,fp)!=NULL)

printf(“%s”,dong);

} fclose(fp);

} else

printf(“Khong the mo tap tin”);

}

Thêm dữữ liliệệu vu vàào cuo cuốối ti tậập tin văn b Thêm d

p tin văn bảản cn cóó ssẵẵnn

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c: (cid:132)(cid:132) MMởở ttậập tin b (cid:132)(cid:132) Ghi dGhi dữữ liliệệu thêm v

p tin bằằng hng hààm m fopen() fopen() vvớới ti tùùy chy chọọnn ““atat””

u thêm vàào cuo cuốối ti tậập tin b p tin bằằng hng hààm m

(cid:132)(cid:132) ĐĐóóng tng tậập tin b

fprintf() fprintf()

fclose() p tin bằằng hng hààm m fclose()

VVíí ddụụ ghghéép 2 tp 2 tậập tinp tin /* Copy du lieu tu tap tin 2 vao phia sau tap tin 1, tra ve 1 neu thanh cong, tra ve 0 neu that bai */ int GhepHaiTapTin(char *tap_tin_1,

char *tap_tin_2)

{

FILE *fp1,*fp2; char dong[MAXCHAR +1];

fp1 = fopen(tap_tin_1,"at"); fp2 = fopen(tap_tin_2,"rt"); if(fp1==NULL || fp2==NULL) {

printf("Loi mo tap tin\n"); return 0;

}

VVíí ddụụ ghghéép 2 tp 2 tậập tinp tin

fprintf(fp1,"\n"); while(!(feof(fp2))) {

if(fgets(dong, MAXCHAR, fp2) !=NULL)

fprintf(fp1,dong);

}

fclose(fp1); fclose(fp2);

return 1;

}

XXửử lý t

lý tậập tin nh

p tin nhịị phânphân

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c:

(cid:132)(cid:132) GGọọi hi hààm m fopen() (cid:132)(cid:132) GGọọi hi hààm m fread()

(cid:132)(cid:132) ĐĐóóng tng tậập tin b

fopen() vvớới ti tùùy chy chọọn cn cóó phphốối hi hợợp vp vớớii ““bb”” fwrite() đ đểể đ đọọc dc dữữ liliệệu tu từừ ttậập p fread() hay hay fwrite() u tin) hay ghi tin vàào bio biếến bn bộộ nhnhớớ (l(làà bibiếến kin kiểểu mu mẫẫu tin) hay ghi tin v ddữữ liliệệu tu từừ bibiếến bn bộộ nhnhớớ vvàào to tậập tinp tin

fclose() p tin bằằng hng hààm m fclose()

CCáác hc hààm đm đọọc, ghi t

c, ghi tậập tin nh

p tin nhịị phânphân

(cid:132)(cid:132) ĐĐọọcc

int fread (void * vungnho, size_t sobytedoc,

size_t solandoc, FILE * tap_tin);

(cid:132)(cid:132) VVíí ddụụ

/* Doc vung du lieu tren tap tin dai dien boi con tro fp, co kich thuoc bang (sizeof) kich thuoc cua 1 mau tin HOCSINH dua vao bien mau tin hs */ fread(&hs,sizeof(HOCSINH),1,fp);

CCáác hc hààm đm đọọc, ghi t

c, ghi tậập tin nh

p tin nhịị phânphân

(cid:132)(cid:132) GhiGhi

size_t fwrite ( const void * vungnho,

size_t sobyteghi, size_t solanghi, FILE * tap_tin );

(cid:132)(cid:132) VVíí ddụụ

/* Ghi mau tin hs len tap tin dai dien boi con tro fp, co kich thuoc bang (sizeof) kich thuoc cua 1 mau tin HOCSINH*/

fwrite(&hs,sizeof(HOCSINH),1,fp);

XXửử lý t

lý tậập tin g

p tin gồồm cm cáác mc mẫẫu tinu tin

p tin bằằng hng hààm m fopen

fopen vvớới ti tùùy chy chọọn n ““r+br+b””

fclose p tin bằằng hng hààm m fclose

(cid:132)(cid:132) MMởở ttậập tin b ghi đđểể đ đọọc vc vàà ghi (cid:132)(cid:132) ĐĐóóng tng tậập tin b (cid:132)(cid:132) CCóó ththểể ddùùng hng hààm m fseek

fseek đ đểể đưa b

đưa bộộ đ địịnh vnh vịị đ đọọc c

ghi đếến mn mẫẫu tin th ghi đ

u tin thíích hch hợợpp ftell đ đểể ghi nh

ghi nhậận ln lạại vi vịị trtríí ccủủa ma mẫẫu u

(cid:132)(cid:132) DDùùng hng hààm m ftell tin mtin màà sau n

sau nàày sy sẽẽ đư đượợc cc cậập nhp nhậật dt dữữ liliệệuu

(cid:132)(cid:132) VVẫẫn đn đọọc vc vàà ghi b

ghi bằằng hng hààm m fread

fwrite fread vvàà fwrite

TTạạo mo mộột tt tậập tin g

p tin gồồm cm cáác mc mẫẫu tinu tin

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c: (cid:132)(cid:132) TTạạo to tậập tin b (cid:132)(cid:132) GGọọi hi hààmm fwrite()

p tin bằằng hng hààm m fopen()

fopen() vvớới ti tùùy chy chọọnn ““wbwb”” ghi dữữ liliệệu tu từừ bibiếến bn bộộ nhnhớớ (l(làà fwrite() ghi d

(cid:132)(cid:132) ĐĐóóng tng tậập tin b

bibiếến kin kiểểu mu mẫẫu tin) v u tin) vàào to tậập tinp tin

fclose() p tin bằằng hng hààm m fclose()

TTạạo mo mộột tt tậập tin g

p tin gồồm cm cáác mc mẫẫu tinu tin

int TaoDanhSachHS(char *ten_tap_tin) {

HOCSINH dshs[3] =

{

{"993236","Lam Vinh Khang",0,0,0}, {"993237","To My Hien",0,0,0}, {"993238","Van Si Ha",0,0,0}

};

FILE *fp;

fp = fopen(ten_tap_tin,"wb");

TTạạo mo mộột tt tậập tin g

p tin gồồm cm cáác mc mẫẫu tinu tin

if(fp!=NULL) {

fwrite(dshs,sizeof(HOCSINH),3,fp); fclose(fp); return 1;

} else {

printf("Khong the tao tap tin!\n"); return 0;

}

}

Thêm mẫẫu tin v Thêm m

u tin vàào to tậập tin c

p tin cóó ssẵẵnn

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c:

(cid:132)(cid:132) GGọọi hi hààm m fopen() (cid:132)(cid:132) GGọọi hi hààm m fwrite()

fopen() vvớới ti tùùy chy chọọnn ““abab”” fwrite() ghi d ghi dữữ liliệệu tu từừ bibiếến bn bộộ nhnhớớ (l(làà

(cid:132)(cid:132) ĐĐóóng tng tậập tin b

bibiếến kin kiểểu mu mẫẫu tin) v u tin) vàào to tậập tinp tin

fclose() p tin bằằng hng hààm m fclose()

ĐĐọọc danh s

c danh sáách mch mẫẫu tin t

u tin từừ ttậập tinp tin

(cid:132)(cid:132) GGồồm 3m 3 bư bướớc:c:

(cid:132)(cid:132) GGọọi hi hààm m fopen() (cid:132)(cid:132) GGọọi hi hààm m fread()

p tin vàào bio biếến n

(cid:132)(cid:132) ĐĐóóng tng tậập tin b

fopen() vvớới ti tùùy chy chọọnn ““rbrb”” fread() đ đểể đ đọọc dc dữữ liliệệu tu từừ ttậập tin v u tin) bbộộ nhnhớớ (l(làà bibiếến kin kiểểu mu mẫẫu tin) fclose() p tin bằằng hng hààm m fclose()

ĐĐọọc danh s

c danh sáách mch mẫẫu tin t

u tin từừ ttậập tinp tin

int DocDanhSachHS(char *ten_tap_tin) {

FILE *fp; HOCSINH hs;

int stt = 0; fp = fopen(ten_tap_tin,"rb"); if(fp!=NULL) { /* Doc tap tin */ ....

ĐĐọọc danh s

c danh sáách mch mẫẫu tin t

u tin từừ ttậập tinp tin

while(!feof(fp)) {

stt++; if(fread(&hs, sizeof(HOCSINH),1,fp)==1) printf("%5d %6s %20s %f %f %f\n",

stt, hs.maso, hs.hoten, hs.diem1, hs.diem2,hs.diem3);

} fclose(fp); return 1;

} else {

printf("Khong the mo tap tin!\n"); return 0;

}

}

CCáác hc hààm qum quảản lý t

n lý tậập tinp tin

(cid:132)(cid:132) XXóóa ta tậập tinp tin

(cid:132)(cid:132) VVíí ddụụ

int remove int ( const char *ten_tap_tin); remove ( const char *ten_tap_tin);

char ten_tap_tin[80]; printf(“Nhap ten tap tin muon xoa: "); gets(ten_tap_tin); if(remove(ten_tap_tin) == 0) printf(“Da xoa tap tin”);

else

printf( “Loi xoa tap tin”);

CCáác hc hààm qum quảản lý t

n lý tậập tinp tin

(cid:132)(cid:132) ĐĐổổi tên t

i tên tậập tinp tin

int rename int

rename( const char *

( const char *ten_cu

ten_cu, const char *

, const char *ten_moi

ten_moi ););

(cid:132)(cid:132) VVíí ddụụ char ten_cu[80], ten_moi[80]; printf(“Nhap ten hien tai: "); gets(ten_cu); printf(“Nhap ten moi: "); gets(ten_moi); if (rename( ten_cu, ten_moi) == 0 )

printf(“Da doi ten tap tin”);

else

printf(“Loi doi ten tap tin”);

CCáác hc hààm qum quảản lý t

n lý tậập tinp tin

(cid:132)(cid:132) Sao ch

Sao chéép tp tậập tinp tin (cid:132)(cid:132) Không c

(cid:132)(cid:132) Tham kh

Không cóó hhààm sm sẵẵn trong thư vi bbằằng cng cáách đch đọọc vc vàà ghi d Tham khảảo ho hààm m CopyFile n trong thư việện. Ph ghi dữữ liliệệu du dạạng nh CopyFile trong s n. Phảải ti tựự viviếết t phân. ng nhịị phân. ch trang 75. trong sáách trang 75.

KKỹỹ thuthuậật lt lậập trp trìình tnh tậập tinp tin

LoLoạại ti tậập tinp tin Tên hààmm Tên h c năng ChChứức năng

văn bảản, nh văn b n, nhịị phânphân fopen fopen p tin mớới i p tin (tậập tin m

c đã cóó ssẵẵn)n)

fprintf fprintf mmởở ttậập tin (t hohoặặc đã c ghi dữữ liliệệu vu vàào to tậập tinp tin ghi d văn bảảnn văn b

văn bảảnn văn b fscanf fscanf

c, ký tựự

fgets fgets u dòng ký tựự văn bảảnn văn b

đđọọc dc dữữ liliệệu tu từừ ttậập tin p tin nguyên, vvàào bio biếến sn sốố nguyên, ththựực, ký t đđọọc dc dữữ liliệệu dòng ký t ttừừ ttậập tin v p tin vàào bio biếến n i ký tựự chuchuỗỗi ký t

KKỹỹ thuthuậật lt lậập trp trìình tnh tậập tinp tin

c năng ChChứức năng LoLoạại ti tậập tinp tin Tên hààmm Tên h

fread fread nhnhịị phânphân

fwrite fwrite p tin đđọọc dc dữữ liliệệu tu từừ ttậập tin vvàào bio biếến n ghi dữữ liliệệu vu vàào to tậập tinp tin ghi d nhnhịị phânphân

fclose fclose

feof feof m tra đã đếến cun cuốối ti tậập p

ftell ftell đđóóng tng tậập tin sau khi p tin sau khi thao táácc thao t kikiểểm tra đã đ tin hay chưa tin hay chưa llấấy vy vịị trtríí hihiệện tn tạạii

n, nhịị văn bảản, nh văn b phânphân n, nhịị văn bảản, nh văn b phânphân n, nhịị văn bảản, nh văn b phânphân