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