Slide 1 Trần Quang © 2016 Kỹ thuật lập trình 1 Chương 09 File Chương 09 TẬP TIN Trần Quang © 2016 Kỹ thuật lập trình 2 Chương 09 File Tập tin (file) Tất cả các biến dữ liệu của chương trình được lưu trong bộ nhớ RAM của máy tính Khi chương trình kết thúc, tất cả các biến này sẽ bị xóa đi Để giữ các dữ liệu này lại khi chương trình kết thúc, ta cần lưu chúng dưới dạng tập tin (file) vào các thiết bị lưu trữ như ổ cứng, CD, DVD, v v Trần Quang © 2016 Kỹ thuật lập trình 3 Chương 09 File Mô hình.
Trang 1Ch ng 09
T P TIN
Trang 2T p tin (file)
T t c các bi n d li u c a ch ng trình đ c l u trong b nh RAM c a máy tính Khi ch ng trình
k t thúc, t t c các bi n này s b xóa đi
gi các d li u này l i khi ch ng trình k t
thúc, ta c n l u chúng d i d ng t p tin (file) vào
các thi t b l u tr nh c ng, CD, DVD, v.v
Trang 3Mô hình t p tin
T p tin là m t dãy các bytes d li u k t thúc b ng
ký t đ c bi t EOF
EOF (End Of File): là giá tr đ c bi t, không trùng
v i b t c giá tr c a byte d li u nào.
EOF: khi dùng các hàm đ c d li u tr v EOF là
Trang 4 T p tin nh phân (binary)
c t o b i ch ng trình nào đó, không dành cho con ng i đ c và hi u tr c ti p b ng NOTEPAD
Các t p tin này ph i dùng ch ng trình dành riêng nào đó m i đ c và di n d ch đ c Ví d file doc
c a MS Word, file nh jpg, file th c thi exe, …
Trang 6Con tr đẬnh d u trong t p tin
…
N bytes d li u c a m t file
EOF
Sau khi m t p tin thành công, con tr đánh d u t đ ng
ch đ n byte đ u tiên c a t p tin
…
EOF
Trang 7Con tr đẬnh d u trong t p tin
Trang 8Khai bẬo con tr t p tin (FILE *)
Trang 10a N i t p tin M t p tin đã có s n ho c t o m i t p tin,
ghi vào cu i t p tin n u đã t n t i r+ M t p tin cho phép đ c l n ghi Không t o m i t p
tin n u t p tin ch a có s n.
w+ M t p tin cho phép đ c l n ghi T o m i t p tin n u
t p tin ch a có s n.
a+ N i t p tin, cho phép đ c t p tin M t p tin đã có
s n ho c t o m i t p tin, ghi vào cu i t p tin đó.
Trang 14Hậm ki m tra cu i t p tin
Cú pháp:
int feof (FILE *fp)
Hàm tr v giá tr khác 0 n u g p cu i file khi đ c, trái l i hàm cho giá tr 0
Trang 15c t t c các ký t trong t p tin vào b đ m
Gi s buffer đ l n đ ch a toàn b d li u t t p tin
void readFile(FILE* fp, char * buffer){
Trang 16Ghi 1 ký t vậo t p tin
Trang 17Hàm fgets() – fputs()
Cú pháp:
char *fgets(char *str, int n, FILE *fp);
Dùng đ đ c 1 chu i t file vào bi n str, n là s ký t
t i đa s đ c
Hàm tr v con tr t i string đ c đ c n u thành công
Hàm tr v NULL n u x y ra l i ho c g p cu i file
Cú pháp:
int fputs(const char *str, FILE *fp);
Dùng đ ghi 1 chu i vào file
Hàm tr v giá tr không âm n u ghi thành công
Trang 19fputs ("Tran van Hung\n", fp);
fputs ("Le Thi Thu Thao\n", fp);
rewind(fp);
fgets (s,100, fp);
printf ("%s", s); // Tran Van Hung
Trang 21Hậm fprintf ( )
Hàm th vi n ghi t p tin theo đ nh d ng:
int fprintf (<file_ptr>, <format>, <argument, …> );
Trang 24Di chuy n con tr v đ u t p tin
Trang 26Random - Access File
Trang 27Random - Access File
Là lo i file đ c m và cho truy c p ng u nhiên
Bao g m m t lo t các m u tin có cùng kích th c
(fixed-length records) Kích th c m u tin ph
thu c vào các thành ph n (tr ng-field) bên trong
m u tin
Trang 28 struct là ki u d li u có th bao g m các thành
ph n bên trong, m i thành ph n có th thu c ki u
d li u c b n khác nh : int, char, float, …
Khai báo:
struct structure_name {data_type member1;
data_type member2;
…
data_type membern;
};
Trang 29 Gán giá tr kh i t o cho bi n struct:
struct person p3 = {"Le Minh", 10, 2000};
Truy c p vào t ng thành ph n dùng toán t (ch m)
printf ("%s\n", p3.name);
Trang 30Hàm fread()
Cú pháp:
size_t fread ( void *buffer , size_t size , size_t count , FILE *fp );
T :
buffer: con tr tr t i data c n ghi xu ng file.
size: kích th c data ghi xu ng file (tính theo byte)
count: s l ng data đ c ghi xu ng file.
Trang 31Hàm fwrite()
Cú pháp
size_t fwrite ( const void *buffer , size_t size ,
size_t count , FILE *fp );
T :
buffer: con tr tr t i data c n ghi xu ng file.
size: kích th c data c n ghi xu ng file (tính theo byte)
count: s l ng data đ c ghi xu ng file.
Ghi chú:
Hàm fwrite() ghi data xu ng file, khác v i hàm fprintf( )
ch hàm fwrite( ) có th ghi c struct, object, xu ng file theo ki u binary Hàm fprintf( ) ch có th ghi d ng text
T r v s l ng data đ c ghi xu ng, n u ghi thành công
N u x y ra l i, hàm s tr v s nguyên nh h n s l ng
Trang 32if ( fread (&ns2, sizeof(ns2), 1, fp) != 1)
printf ("\nError reading ");
else
printf ("\nNgay sinh: %.2d/%.2d/%.4d", ns2.d, ns2.m, ns2.y);
Trang 33Nh p và in danh sách sinh viên
printf ("\nNhap sv%d:\n", i);
printf (" Ten: "); gets(sv.ten);
printf (" dtb: "); scanf("%f", &sv.dtb);
fwrite (&sv, sizeof(struct sinhvien), 1, fp);
}
rewind(fp);
while ( fread(&sv, sizeof(struct sinhvien),1,fp) != 0 )