ề ậ ớ ệ Gi i thi u v t p tin
ạ ậ Phân lo i t p tin
ử ả ă Các thao tác x lý c n b n
ử ộ ố M t s hàm x lý khác
Bài t pậ
T p tin văn b n ASCII
ả
ậ
T p tin nh phân
ậ
ị
khóa FILE đ
c đ nh
Khai báo bi n t p tin b ng t ế ậ
ằ
ượ ị
nghĩa trong v i c u trúc:
ừ ớ ấ
FILE Danh sách bi n ế con trỏ
Ví d :ụ
ế
ỏ
FILE *fp; // Khai báo 1 bi n con tr file
ỏ
ề
ế
FILE *fp1,*fp2 // Khai báo nhi u bi n con tr file
đườ
ể
ẫ
fopen (char *
ng d n, char *ki u)
ế
để ở ộ ể ỏ
m m t File, n u thành công ứ
ớ
ừ
ượ
ả ề
ạ
c l i tr v NULL.
ng d n
đ
ấ ậ
ườ
ế
ỉ
ng d n đ truy xu t t p tin. N u ể ng d n thì s truy xu t trong th m c hi n hành. ư ụ
ẫ : ch đ nh tên đ ị ẽ ẫ
ẫ ấ
ườ
ệ
Hàm dùng ả ề tr v con tr ki u File ng v i File ở v a m , ng Trong đó: ườ trong có đ Ví d : ụ
ườ
ng d n
ườ
ẫ
các tùy ch n sau:
h p các ký t
mô t
fopen (“test.txt”,…) // Không đ ng d n ẫ fopen (“D:\\test\\test.txt”,…) // Có đ ả
ổ ợ
ự
ọ
ki uể là t
ở ậ
“w”
đĩ ỉ để ghi vào a. (n u ã ũ ẽ ị
ụ
ộ
ế đ M t p tin ch ậ có thì n i d ng t p tin c s b xóa)
“w+”
. (n u ã có thì
ớ ể đ c, ghi ọ ũ ẽ ị
ở ộ ậ ộ
ụ
ậ
M m t t p tin m i đ ế đ n i d ng t p tin c s b xóa).
đ
ừ đĩ
“r”
ỉ để đọ
c t a vào
ớ
ở ậ M t p tin ã có ch ộ b nh .
ở ậ
đ
đĩ để
“r+”
cđọ ho c ặ
M t p tin ã có trên a ghi.
“a”
ở ậ ậ
M t p tin t p tin (không
để thêm vào (append) cu i ố c)
đọ đượ c
để
ở ậ
đọ
ế
ậ
“a+”
. N u t p tin ã ạ ư
ậ
ố
đ c, ghi M t p tin ế có thì n i thêm. N u ch a thì t o t p tin m i.ớ
ở ậ
“b”
M t p tin ki u
ị ể nh phân
(binary)
ở ậ
ă
“t”
M t p tin ki u
ể v n b n
ả (text)
ụ ư
ọ
Ta có th k t h p các tùy ch n. Ví d nh “rt”, ể ế ợ “wb” hay “a+t”…
Ví d :ụ FILE *fp; fp = fopen (“SINHVIEN.TXT”, “rt”); if (fp==NULL) {
printf(“Khong mo duoc tap tin.”); perror (“Ly do\n”);
} else {
printf(“Da mo duoc tap tin.”);
}
ậ
int fclose (bi n_t p_tin)
đ ấ ở ả
ế óng t t c các File ang m ta còn
Để đ có th dùng hàm:
ể int fcloseall ()
c
ị
ượ
N u thành công 2 hàm này cho giá tr khác 0, ng ế i tr v EOF. l ạ ả ề
FILE *fp; fp = fopen (“sinhvien.txt”,”wt”); if (fp!=NULL)
fclose (fp);
Ghi ký tự: (Làm vi c v i Text & Binary.)
ệ ớ
int putc(int ch, FILE *fp);
int fputc(int ch, FILE *fp);
có mã = ch%256. ẽ ộ
c ghi, ng c l ả ề i tr ượ ạ ả
2 hàm này s ghi vào file m t ký t ự N u thành công tr v mã ký t đ ự ượ ế v EOF. ề
File:
(Làm vi c v i Text & Binary. )
Đ c ký t ọ
t ự ừ
ệ ớ
int getc(FILE *fp);
int fgetc(FILE *fp);
ọ
ế c l Hàm đ c m t ký t mã c a ủ ký t ộ ự đ c đ t ự ừ ọ ượ File fp, n u thành công hàm cho ượ ạ ả ề EOF. i tr v c, ng
Ví d : ụ char c = fgetc (fp);
Ghi chu i ký t :
ỗ
ự (Làm vi c v i Text )
ệ ớ
int fputs(const char *s, FILE *fp);
ả ề ký tự
c l ượ ố
Hàm s ghi chu i s lên File fp. n u thành công tr v ẽ cu i cùng đ Đ c chu i (dãy) ký t ổ ọ ế ượ ạ ả ề EOF. i tr v (Làm vi c v i Text ) ệ ớ ỗ c ghi vào File, ng File: t ự ừ
char *fgets(char *s, int n, FILE *fp);
File fp vào vùng nh s, k t ộ ế ớ
c t ự ừ ho c g p ký t ự ặ ặ ả ề đ a ch ị ế ỉ vùng nh n k t qu , ng xu ng dòng n u ự ố ậ ế ả ượ
i tr v Hàm s đ c m t dãy ký t ẽ ọ thúc khi đ ủ n-1 ký t thành công hàm tr v ạ ả ề NULL. l
Ghi d li u theo khuôn d ng
ữ ệ
ạ : (Làm vi c v i Text )
ệ ớ
int fprintf(FILE *fp, const char *control, ...);
ứ ị ỉ ủ ể ớ ỗ
V i control ch a đ a ch c a chu i đi u khi n (gi ng nh ư
ố ị ủ ề ố
trong hàm printf), ... là danh sách các đ i mà giá tr c a chúng c n ghi vào File. ầ
Ví d :ụ
FILE *fp; int a=777 fp = fopen (“taptin.txt”, “wt”); if (fp!=NULL)
fprintf(fp, “%d\n”,a );
ụ ề ữ ệ
Ví d v ghi d li u: void taotaptin() //tao tap tin de ghi(lay du lieu bo
nho de ghi len tap tin)
{
FILE *fp; fp=fopen("TEXT.txt","wt"); if(fp!=NULL) {
char s[]=“Nguyen Van A”; float dtb = 8.5; //ghi du lieu len tap tin fprintf(fp,“Sinh vien ”); fputs (s,fp); fprintf(fp, “\nDiem trung binh %.2f”,dtb);
}
else
printf(“Ko tao duoc tap tin\n” );
}
Đ c d li u theo khuôn d ng: (Làm vi c v i Text )
ọ ữ ệ
ệ ớ
ạ
int fscanf(FILE *fp, const char *control,...);
ỉ ủ
ứ ị
ề
ể
ổ
ố ứ ế
ố
File.
c t
ọ ượ ừ
V i ớ control ch a đ a ch c a chu i đi u khi n (gi ng nh ư trong hàm scanf), ... là danh sách các đ i ch a k t qu ả đ c đ Ví d :ụ
FILE *fp; int a; fp = fopen (char *tentaptin, “wt”); if (fp!=NULL && feof!=NULL) fscanf(fp, “%d”,&a );
ứ ợ
ứ
đượ đị
ạ
ụ ề ọ ữ ệ ộ
thông tin các sinh viên, nh sau:
ố
ự
đọ
ươ
ế
ầ
ng trình
c file
ư
9.5
Ví d v đ c d li u ph c h p: Ta có m t file text (sinhvien.txt) ch a c nh d ng
struct sinhvien {
char MSSV[9]; char HoTen [30]; char gioitinh[4]; char ntns[10]; float dtb;
}; void main() {
FILE *fp; sinhvien sv; fp = fopen ("ds.txt","rt"); if (fp!=NULL) {
fscanf(fp,"%[^]%[^(](%[^)])\t%[^\t]\t%f” ,
sv.MSSV,sv.HoTen,sv.gioitinh,sv.ntns,&sv.dtb);
fclose(fp);
} printf("%s\n(%s)\n%s\n %.2f",sv.MSSV,sv.gioitinh,sv.ntns,sv.dtb);
}
Ghi m t s nguyên : ộ ố
(Làm vi c v i Binary. ) ệ ớ
int putw(int n, FILE *fp);
N u thành công hàm tr v
c ghi
, ng
c l
ả ề s nguyên đ
ố
ượ
i tr ượ ạ ả
ệ
ớ
c m t s nguyên : ố
(Làm vi c v i Binary.
ế v ề EOF. Đọ ộ )
int getw(FILE *fp);
ọ
ộ ố
đ c đ
c, khi có l
ọ ượ
ỗ
i ho c ặ
Hàm đ c m t s nguyên(2 byte). N u thành công tr v ế cu i File hàm tr v
ả ề s nguyên ố ả ề EOF.
ố
Ví d :ụ
void main() {
FILE *f; int n; f = fopen ("myfile.bin",“r+b"); if (f!=NULL) {
n=getw(f); if(n!=EOF)
printf("Da doc thanh cong!\n%d",n);
} else
printf("Loi");
}
Ghi các m u tin lên File: ẫ
int fwrite( void *pt, int size, int n, File *fp);
size
ỏ ỏ ớ
c c a m u tin (byte),
fp là con
V i ớ pt là con tr tr t ẫ
ướ ủ
i vùng nh ch a d li u c n ghi, ớ ứ ữ ệ ầ n làs m u tin, ố ẫ
ỏ
Hàm s ghi n m u tin kích th
c size byte t
vùng nh pt
ẫ
ướ
ừ
ớ
là kích th tr File. ẽ
lên File fp. Hàm tr v m t
c ghi.
ả ề ộ giá tr ị = s m u tin th c s đ
ự ự ượ
ố ẫ
Đ c các m u tin t
File:
ẫ
ọ
ừ
int fread( void *pt, int size, int n, File *fp);
ỏ ỏ ớ
i vùng nh ch a d li u đ c đ ớ ứ ữ ệ
ẫ
c, ọ ượ n là s m u tin c n ầ
ố ẫ
size là kích th đ c, ọ fp là con tr File.
Hàm s đ c n m u tin kích th
c size byte t
File fp vào
V i ớ pt là con tr tr t c c a m u tin (byte), ướ ủ ỏ ẫ
ướ
ừ
ẽ ọ ớ
vùng nh pt. Hàm tr v m t
ả ề ộ giá tr ị = s m u tin th c s
ự ự đ c đ
ố ẫ
ọ ượ . c
ng có ể ọ ườ ố ượ
Các hàm fread, fwrite th
cùng đ l n nh ộ ớ ng dùng đ đ c ghi các đ i t ố ự . ư c u trúc, s th c ấ
Ví d : Ghi c u trúc c a sinh viên
ụ
ủ
ấ
void GhiSV (SV *&sv){
FILE * f;
int n; f= fopen("DSSV.DAT","wb"); if (f!=NULL)
{
printf("\nNhap vao so sv: ");
scanf("%d",&n);
sv = (SV *)malloc (n*sizeof(SV));
for(int i=0; i
{
printf("\nNhap sv %d ",i+1);
NhapSV(sv[i]);
}
for (i=0;i
printf("%s\t%s\n",(sv+i)->mssv,
(sv+i)->ten);
fwrite(sv,sizeof(SV),n,f);
}
fclose(f);
Ví d : Đ c c u trúc sinh viên
ụ ọ
ấ
void DocSV (){
long l; SV *buffer;
int result;
FILE *f;
f= fopen("DSSV.DAT","rb");
if (f==NULL) printf("Khong mo duoc tap tin");
else{
fseek (f , 0 , SEEK_END);
l = ftell (f);//tinh tong so byte cua tap tin
rewind(f);
buffer = (SV*) malloc (1*sizeof(SV));
result = 0; int count=0;
while(!feof(f)){
if (count = fread(buffer,sizeof(SV),1,f)==1){
result += count;
printf("Doc duoc %s %s\n",buffer-
>mssv,buffer->ten);}}
if(result == l/sizeof(SV))
printf("Thanh cong, doc duoc %d cau
truc\n", result);
else
{
printf("Qua trinh doc loi\n");
printf("Doc duoc %d cau truc\n",
result);
}
free (buffer);
}
fclose (f);
}
int rename(“ten_tap_tin_cu”, “ten_tap_tin_moi”);
ổ
ng d n nh
ẫ
ng d n
ườ ư fopen.
ặ ị ẫ , m c đ nh cùng
ả ề
Đ i tên t p tin.
ậ
ten_tap_tin_cu: khai báo đ
ườ
ten_tap_tin_moi: không c n ầ đ
chung th m c v i t p tin cũ
ư ụ ớ ậ
Tr v 0 n u thành công.
ế
Vd: rename(“C:\\WINDOWS\\regedit.exe”,”hehe.txt”);
int remove(“ten_tap_tin_can_xoa”);
Thanh cong tra ve 0;
Vd: remove(“C:\\WINDOWS\\regedit.exe”);
ệ ạ
int fflush(FILE *fp);
Làm s ch vùng đ m File fp
Thành công cho giá tr 0, ng
i cho giá tr EOF. ị c l
ượ ạ ị
int flushall(void);
ạ ở
c Làm s ch vùng đ m c a các File đang m
ệ
ị ố ệ ủ
ả ề ở ượ
N u thành công hàm tr v giá tr s t p đang m , ng
ế
l
i tr vè EOF.
ạ ả
Dùng ki m tra l
i tr v 0. c l
int ferror(FILE *fp);
i thao tác trên File fp.
ỗ
Hàm tr v giá tr khác 0 n u có l
i, ng
ế
ị
ể
ả ề ỗ ượ ạ ả ề
void perror(const char *s);
In chu i s và thông báo l i h th ng. ổ ỗ ệ ố
int unlink(const char *filename);
Xoá m t File trên đĩa
ộ
N u thành công hàm cho giá tr 0, ng i tr v EOF. c l ế ị ượ ạ ả ề
void rewind(FILE *fp);
Chuy n con tr ch v c a File fp v đ u File. ỏ ỉ ề ầ ị ủ ể
int fseek(FILE *fp, long so_byte, int vt_bat_dau);
vt_bat_dau.
ờ
ỏ ậ
ừ
D i con tr t p tin đi so_byte tính t
N u:ế
i.
ướ
c lên.
ố
ượ
so_byte > 0: chuy n xu ng d
ể
so_byte < 0. chuy n ng
ể
so_byte = 0: đ ng t
i vt_bat_dau.
ạ
vt_bat_dau có th mang m t trong các giá tr sau:
ị
ứ
ể
SEEK_SET(0): v trí đ u t p tin.
SEEK_CUR(1): v trí hi n hành.
SEEK_END(2): v trí cu i t p tin.
ộ
ầ ậ
ệ
ố ậ
ị
ị
ị
long ftell(FILE *fp);
i c a
ệ ạ ủ
c
ượ
i hàm ỗ
Tr v v trí hi n t
ả ề ị
con tr ch v (byte) đ
ị
ỏ ỉ
tính t
0. N u có l
ế
ừ
tr v -1L.
ả ề
fgetpos(FILE* f, fpos_t *vitri);
Đánh d u trên t p tin
.
ấ
fpos_t là ki u đ nh nghĩa trong ậ
ị ể
“stdio.h”
*vitri là bi n con tr l u v trí ỏ ư ị
ế
đánh d u trên t p tin ậ ấ
Quay l
i v trí đánh d u
đánh d u b ng hàm
ấ sau khi
fgetpos
ạ ị
ấ
ằ
fsetpos(FILE* f, fpos_t *vitri)
t ch
ả
ấ
1. Vi
ế
ộ
ị
ậ
ng trình đ c t p tin văn b n có c u trúc là
ọ ậ
ươ
m t ma tr n vuông (n*n) :
ậ
Dòng đ u l u giá tr n.
ầ ư
Các dòng ti p theo là m i dòng c a ma tr n. Hai s k
ố ề
ế
ượ ư ở
1. Vi
ậ
ả
ậ
ộ ụ
c ghép vào t p tin th nh t).
Ví d :ụ
4
1 2 4 5
5 0 7 6
4 2 1 3
9 4 5 2
t ch
ươ
ế
tin th hai ghép đ
ứ
ng trình ghép 2 t p tin văn b n (n i d ng t p
ậ
ứ ấ
ượ
ủ
c l u b i kho ng tr ng. nhau đ ỗ
ả ắ
ng trình đ nh p thêm d li u cho m u tin
ề ậ
t ch
ươ
ộ
ẫ
ỉ ứ
ữ ệ
ị
ng trình đ c d li u t
t ch
1. Vi
ế
c a m t sinh viên vào cu i t p tin nh phân ch ch a
ố ậ
ủ
m u tin sinh viên.
ẫ
2. Vi
ươ
ế
ọ ữ ệ ừ ậ
ẫ
i các
ắ ế ạ
ủ
t p tin ch a các m u
ứ
tin là thông tin c a sinh viên. Sau đó s p x p l
m u tin theo các thông tin.
t ch
ậ
ươ
ồ
ẫ
3. Vi
ế
c không
ướ
4. Vi
ủ
ộ
ng trình tìm xem trong t p tin g m các m u
ẫ
tin SINHVIEN xem có sinh viên nào có MSSV là m t ộ
mã đã cho tr
t ch
ế
MSSV đ
ng trình s a ngày sinh c a m t sinh viên có
c cho tr
c.
ươ
ượ
ử
ướ
{
printf("\nNhap sv %d ",i+1); NhapSV(sv[i]);
}
for (i=0;i
printf("%s\t%s\n",(sv+i)->mssv,
(sv+i)->ten);
fwrite(sv,sizeof(SV),n,f);
}
fclose(f);
Ví d : Đ c c u trúc sinh viên
ụ ọ
ấ
void DocSV (){
long l; SV *buffer;
int result;
FILE *f;
f= fopen("DSSV.DAT","rb");
if (f==NULL) printf("Khong mo duoc tap tin");
else{
fseek (f , 0 , SEEK_END);
l = ftell (f);//tinh tong so byte cua tap tin
rewind(f);
buffer = (SV*) malloc (1*sizeof(SV));
result = 0; int count=0;
while(!feof(f)){
if (count = fread(buffer,sizeof(SV),1,f)==1){
result += count;
printf("Doc duoc %s %s\n",buffer-
>mssv,buffer->ten);}}
if(result == l/sizeof(SV))
printf("Thanh cong, doc duoc %d cau
truc\n", result);
else
{
printf("Qua trinh doc loi\n");
printf("Doc duoc %d cau truc\n",
result);
}
free (buffer);
}
fclose (f);
}
int rename(“ten_tap_tin_cu”, “ten_tap_tin_moi”);
ổ
ng d n nh
ẫ
ng d n
ườ ư fopen.
ặ ị ẫ , m c đ nh cùng
ả ề
Đ i tên t p tin.
ậ
ten_tap_tin_cu: khai báo đ
ườ
ten_tap_tin_moi: không c n ầ đ
chung th m c v i t p tin cũ
ư ụ ớ ậ
Tr v 0 n u thành công.
ế
Vd: rename(“C:\\WINDOWS\\regedit.exe”,”hehe.txt”);
int remove(“ten_tap_tin_can_xoa”);
Thanh cong tra ve 0;
Vd: remove(“C:\\WINDOWS\\regedit.exe”);
ệ ạ
int fflush(FILE *fp);
Làm s ch vùng đ m File fp
Thành công cho giá tr 0, ng
i cho giá tr EOF. ị c l
ượ ạ ị
int flushall(void);
ạ ở
c Làm s ch vùng đ m c a các File đang m
ệ
ị ố ệ ủ
ả ề ở ượ
N u thành công hàm tr v giá tr s t p đang m , ng
ế
l
i tr vè EOF.
ạ ả
Dùng ki m tra l
i tr v 0. c l
int ferror(FILE *fp);
i thao tác trên File fp.
ỗ
Hàm tr v giá tr khác 0 n u có l
i, ng
ế
ị
ể
ả ề ỗ ượ ạ ả ề
void perror(const char *s);
In chu i s và thông báo l i h th ng. ổ ỗ ệ ố
int unlink(const char *filename);
Xoá m t File trên đĩa
ộ
N u thành công hàm cho giá tr 0, ng i tr v EOF. c l ế ị ượ ạ ả ề
void rewind(FILE *fp);
Chuy n con tr ch v c a File fp v đ u File. ỏ ỉ ề ầ ị ủ ể
int fseek(FILE *fp, long so_byte, int vt_bat_dau);
vt_bat_dau.
ờ
ỏ ậ
ừ
D i con tr t p tin đi so_byte tính t
N u:ế
i.
ướ
c lên.
ố
ượ
so_byte > 0: chuy n xu ng d
ể
so_byte < 0. chuy n ng
ể
so_byte = 0: đ ng t
i vt_bat_dau.
ạ
vt_bat_dau có th mang m t trong các giá tr sau:
ị
ứ
ể
SEEK_SET(0): v trí đ u t p tin.
SEEK_CUR(1): v trí hi n hành.
SEEK_END(2): v trí cu i t p tin.
ộ
ầ ậ
ệ
ố ậ
ị
ị
ị
long ftell(FILE *fp);
i c a
ệ ạ ủ
c
ượ
i hàm ỗ
Tr v v trí hi n t
ả ề ị
con tr ch v (byte) đ
ị
ỏ ỉ
tính t
0. N u có l
ế
ừ
tr v -1L.
ả ề
fgetpos(FILE* f, fpos_t *vitri);
Đánh d u trên t p tin
.
ấ
fpos_t là ki u đ nh nghĩa trong ậ
ị ể
“stdio.h”
*vitri là bi n con tr l u v trí ỏ ư ị
ế
đánh d u trên t p tin ậ ấ
Quay l
i v trí đánh d u
đánh d u b ng hàm
ấ sau khi
fgetpos
ạ ị
ấ
ằ
fsetpos(FILE* f, fpos_t *vitri)
t ch
ả
ấ
1. Vi
ế
ộ
ị
ậ
ng trình đ c t p tin văn b n có c u trúc là
ọ ậ
ươ
m t ma tr n vuông (n*n) :
ậ
Dòng đ u l u giá tr n.
ầ ư
Các dòng ti p theo là m i dòng c a ma tr n. Hai s k
ố ề
ế
ượ ư ở
1. Vi
ậ
ả
ậ
ộ ụ
c ghép vào t p tin th nh t).
Ví d :ụ
4
1 2 4 5
5 0 7 6
4 2 1 3
9 4 5 2
t ch
ươ
ế
tin th hai ghép đ
ứ
ng trình ghép 2 t p tin văn b n (n i d ng t p
ậ
ứ ấ
ượ
ủ
c l u b i kho ng tr ng. nhau đ ỗ
ả ắ
ng trình đ nh p thêm d li u cho m u tin
ề ậ
t ch
ươ
ộ
ẫ
ỉ ứ
ữ ệ
ị
ng trình đ c d li u t
t ch
1. Vi
ế
c a m t sinh viên vào cu i t p tin nh phân ch ch a
ố ậ
ủ
m u tin sinh viên.
ẫ
2. Vi
ươ
ế
ọ ữ ệ ừ ậ
ẫ
i các
ắ ế ạ
ủ
t p tin ch a các m u
ứ
tin là thông tin c a sinh viên. Sau đó s p x p l
m u tin theo các thông tin.
t ch
ậ
ươ
ồ
ẫ
3. Vi
ế
c không
ướ
4. Vi
ủ
ộ
ng trình tìm xem trong t p tin g m các m u
ẫ
tin SINHVIEN xem có sinh viên nào có MSSV là m t ộ
mã đã cho tr
t ch
ế
MSSV đ
ng trình s a ngày sinh c a m t sinh viên có
c cho tr
c.
ươ
ượ
ử
ướ
printf("%s\t%s\n",(sv+i)->mssv,
(sv+i)->ten);
fwrite(sv,sizeof(SV),n,f); } fclose(f);
Ví d : Đ c c u trúc sinh viên
ụ ọ
ấ void DocSV (){
long l; SV *buffer;
int result; FILE *f; f= fopen("DSSV.DAT","rb"); if (f==NULL) printf("Khong mo duoc tap tin"); else{ fseek (f , 0 , SEEK_END); l = ftell (f);//tinh tong so byte cua tap tin rewind(f); buffer = (SV*) malloc (1*sizeof(SV)); result = 0; int count=0; while(!feof(f)){
if (count = fread(buffer,sizeof(SV),1,f)==1){
result += count; printf("Doc duoc %s %s\n",buffer-
>mssv,buffer->ten);}}
if(result == l/sizeof(SV))
printf("Thanh cong, doc duoc %d cau
truc\n", result);
else {
printf("Qua trinh doc loi\n"); printf("Doc duoc %d cau truc\n",
result);
} free (buffer);
} fclose (f);
}
int rename(“ten_tap_tin_cu”, “ten_tap_tin_moi”);
ổ
ng d n nh ẫ ng d n ườ ư fopen. ặ ị ẫ , m c đ nh cùng
ả ề
Đ i tên t p tin. ậ ten_tap_tin_cu: khai báo đ ườ ten_tap_tin_moi: không c n ầ đ chung th m c v i t p tin cũ ư ụ ớ ậ Tr v 0 n u thành công. ế Vd: rename(“C:\\WINDOWS\\regedit.exe”,”hehe.txt”);
int remove(“ten_tap_tin_can_xoa”);
Thanh cong tra ve 0; Vd: remove(“C:\\WINDOWS\\regedit.exe”);
ệ ạ
int fflush(FILE *fp); Làm s ch vùng đ m File fp Thành công cho giá tr 0, ng
i cho giá tr EOF. ị c l ượ ạ ị
int flushall(void);
ạ ở
c Làm s ch vùng đ m c a các File đang m ệ ị ố ệ ủ ả ề ở ượ
N u thành công hàm tr v giá tr s t p đang m , ng ế l i tr vè EOF. ạ ả
Dùng ki m tra l
i tr v 0. c l
int ferror(FILE *fp); i thao tác trên File fp. ỗ Hàm tr v giá tr khác 0 n u có l i, ng ế ị
ể ả ề ỗ ượ ạ ả ề
void perror(const char *s);
In chu i s và thông báo l i h th ng. ổ ỗ ệ ố
int unlink(const char *filename);
Xoá m t File trên đĩa ộ
N u thành công hàm cho giá tr 0, ng i tr v EOF. c l ế ị ượ ạ ả ề
void rewind(FILE *fp);
Chuy n con tr ch v c a File fp v đ u File. ỏ ỉ ề ầ ị ủ ể
int fseek(FILE *fp, long so_byte, int vt_bat_dau);
vt_bat_dau.
ờ
ỏ ậ
ừ
D i con tr t p tin đi so_byte tính t N u:ế
i.
ướ c lên.
ố ượ
so_byte > 0: chuy n xu ng d ể so_byte < 0. chuy n ng ể so_byte = 0: đ ng t
i vt_bat_dau.
ạ vt_bat_dau có th mang m t trong các giá tr sau:
ị
ứ ể SEEK_SET(0): v trí đ u t p tin. SEEK_CUR(1): v trí hi n hành. SEEK_END(2): v trí cu i t p tin.
ộ ầ ậ ệ ố ậ
ị ị ị
long ftell(FILE *fp);
i c a ệ ạ ủ c ượ i hàm ỗ
Tr v v trí hi n t ả ề ị con tr ch v (byte) đ ị ỏ ỉ tính t 0. N u có l ế ừ tr v -1L. ả ề
fgetpos(FILE* f, fpos_t *vitri);
Đánh d u trên t p tin . ấ fpos_t là ki u đ nh nghĩa trong ậ ị ể
“stdio.h”
*vitri là bi n con tr l u v trí ỏ ư ị
ế đánh d u trên t p tin ậ ấ
Quay l
i v trí đánh d u
đánh d u b ng hàm
ấ sau khi fgetpos
ạ ị ấ
ằ
fsetpos(FILE* f, fpos_t *vitri)
t ch
ả
ấ
1. Vi ế ộ
ị
ậ
ng trình đ c t p tin văn b n có c u trúc là ọ ậ ươ m t ma tr n vuông (n*n) : ậ Dòng đ u l u giá tr n. ầ ư Các dòng ti p theo là m i dòng c a ma tr n. Hai s k ố ề ế ượ ư ở
1. Vi
ậ
ả
ậ
ộ ụ c ghép vào t p tin th nh t).
Ví d :ụ 4 1 2 4 5 5 0 7 6 4 2 1 3 9 4 5 2 t ch ươ ế tin th hai ghép đ ứ
ng trình ghép 2 t p tin văn b n (n i d ng t p ậ
ứ ấ
ượ
ủ c l u b i kho ng tr ng. nhau đ ỗ ả ắ
ng trình đ nh p thêm d li u cho m u tin
ề ậ
t ch ươ ộ
ẫ ỉ ứ
ữ ệ ị
ng trình đ c d li u t
t ch
1. Vi ế c a m t sinh viên vào cu i t p tin nh phân ch ch a ố ậ ủ m u tin sinh viên. ẫ 2. Vi ươ ế
ọ ữ ệ ừ ậ
ẫ
i các
ắ ế ạ
ủ
t p tin ch a các m u ứ tin là thông tin c a sinh viên. Sau đó s p x p l m u tin theo các thông tin.
t ch
ậ
ươ
ồ
ẫ 3. Vi ế
c không
ướ
4. Vi
ủ
ộ
ng trình tìm xem trong t p tin g m các m u ẫ tin SINHVIEN xem có sinh viên nào có MSSV là m t ộ mã đã cho tr t ch ế MSSV đ
ng trình s a ngày sinh c a m t sinh viên có c cho tr
c.
ươ ượ
ử ướ