Thông tin tài liệu
Chương 6 Tệp tin (file) Đặt vấn đề Các CTDL đã khảo sát có cùng 1 đặc tính đó là được lưu trữ ở bộ nhớ trong (RAM), do đó dữ liệu sẽ mất khi kết thúc chương trình. Cần có một cách tổ chức lưu trữ dữ liệu lâu dài, đó là trên bộ nhớ ngoài (disk, tape, ). Trên bộ nhớ ngoài dữ liệu được tổ chức thành các tệp tin (file). Đặt vấn đề (tt) Mảng Tệp RAM DISK Logic View Tệp và con trỏ tệp Vì t ệ p là CTDL trên b ộ nh ớ ngoài (BNN) nên v ớ i các thi ế t b ị khác nhau có cách t ổ ch ứ c l ư u tr ữ v ậ t lý khác nhau. Điề u này gây tr ở ng ạ i cho ch ươ ng trình khi mu ố n truy xu ấ t t ệ p (vì nó c ầ n ph ả i bi ế t nó đang l àm vi ệ c v ớ i thi ế t b ị gì, theo cách nh ư th ế nào ). Để kh ắ c ph ụ c, C xây d ự ng đố i t ượ ng “dòng” ( stream). Ch ươ ng trình ch ỉ làm vi ệ c v ớ i các dòng, ph ầ n còn l ạ i (t ươ ng tác gi ữ a “dòng” v ớ i file v ậ t lý đượ c x ử lý s ẵ n). V ớ i cách làm nh ư v ậ y vi ệ c truy xu ấ t file tr ở nên độ c l ậ p v ớ i các thi ế t b ị v ậ t lý. Để qu ả n lý các dòng làm vi ệ c v ớ i file C cung c ấ p m ộ t con tr ỏ ki ể u FILE tr ỏ đế n vùng đệ m d ữ li ệ u (buffer) c ủ a “dòng”. Tệp và con trỏ tệp (tt) Khai báo con trỏ file: Ví dụ: FILE *<tên con trỏ>; FILE *f, *g;//g và f là 2 con trỏ FILE Tệp và con trỏ tệp (tt) Qui ước: - Khi mở file để đọc dữ liệu, con trỏ file trỏ đến phần tử đầu tiên của file (phần tử thứ 0). - Mỗi file có một điểm kết thúc file EOF (end of file). - Sau mỗi thao tác truy xuất dữ liệu, con trỏ file tự động dịch chuyển đến phần tử kế tiếp. EOF f File Phần loại file Ở m ứ c độ v ậ t lý m ọ i file đề u nh ư nhau, đề u là dãy các byte trên b ộ nh ớ ngoài. Để d ễ thao tác, ở m ứ c độ logic C chia ra 2 lo ạ i file: v ă n b ả n và nh ị phân. File v ă n b ả n (text): - d ữ li ệ u đượ c l ư u ở d ạ ng mã ASCII. - d ấ u hi ệ u k ế t thúc file EOF có mã là 26. File nh ị phân (binary): - d ữ li ệ u đượ c l ư u ở d ạ ng các byte nh ị phân (không quan tâm đế n ki ể u d ữ li ệ u mà các byte đ ó bi ể u di ễ n). - d ấ u hi ệ u k ế t thúc file EOF = -1. Truy xuất file Các hàm dùng chung cho cả hai loại file: Hàm mở file: Ví dụ: Truy xuất file (tt) Hàm đóng file: Hàm kiểm tra kết thúc file: Truy xuất file (tt) Hàm xóa file: Đọc dữ liệu: Ghi dữ liệu: Truy xuất file (tt) #include <stdio.h> #include <conio.h> void docFile() { FILE *f; char ch; if((f=fopen("d:\\baigiang\\oop\\dulieu.txt","rt"))==NULL) { printf("\nloi mo file"); return; } while((ch=fgetc(f))!=EOF) printf("%c",ch); fclose(f); } void main() { docFile(); } Ví dụ 1 Truy xuất file văn bản Đối với file văn bản có các cách truy xuất sau: - T/X có định dạng: fprintf, fscanf. - T/X chuỗi ký tự: fgets, fputs. (tự đọc) Hàm fprintf: Truy xuất file văn bản (tt) Ví dụ: Hàm fscanf: Truy xuất file văn bản (tt) void docfile(int a[], int *n) { FILE *f; f=fopen("D:\\dulieu.txt","rt"); if(!f) { printf("\nkhong mo duoc file");getch(); return; } *n=0; while(fscanf(f,"%d",&a[*n])!=EOF)++(*n); fclose(f); } Hàm đọc dữ liệu từ file “dulieu.txt” vào mảng a Truy xuất file nhị phân Đối với file nhị phân có các cặp hàm t/x sau: getw / putw (tự đọc) fread / fwrite Hàm fread: Truy xuất file nhị phân (tt) Hàm fwrite: Truy xuất file nhị phân (tt) Hàm ftell: Truy xuất file nhị phân (tt) . trỏ FILE Tệp và con trỏ tệp (tt) Qui ước: - Khi mở file để đọc dữ liệu, con trỏ file trỏ đến phần tử đầu tiên của file (phần tử thứ 0). - Mỗi file có một điểm kết thúc file EOF (end of file) . - Sau. di ễ n). - d ấ u hi ệ u k ế t thúc file EOF = -1 . Truy xuất file Các hàm dùng chung cho cả hai loại file: Hàm mở file: Ví dụ: Truy xuất file (tt) Hàm đóng file: Hàm kiểm tra kết thúc file: Truy. lo ạ i file: v ă n b ả n và nh ị phân. File v ă n b ả n (text): - d ữ li ệ u đượ c l ư u ở d ạ ng mã ASCII. - d ấ u hi ệ u k ế t thúc file EOF có mã là 26. File nh ị phân (binary): - d ữ li ệ u
Ngày đăng: 05/07/2014, 12:21
Xem thêm: Kỹ thuật lập trình - File pdf, Kỹ thuật lập trình - File pdf