Dữ liệu của chương trình được lưu trữ trong bộ nhớ chính (các biến bộ nhớ), không được lưu trữ cho lần chạy kế tiếp của chương trình. Mục đích chính của việc lập trình với tập tin là nhằm để lưu trữ dữ liệu vào bộ nhớ phụ truy xuất trở lại khi cần thiết. Trong bài giảng này chúng ta sẽ tập trung vào các kiến thức về lập trình với tập tin, mời các bạn cùng tham khảo.
Lập trình với tập tin Nguyễn Đơng Hà Khoa CNTT – ĐH KHTN Sưu tầm bởi: www.daihoc.com.vn Lập trình với tập tin Dữ liệu chương trình lưu trữ nhớ (các biến nhớ), không lưu trữ cho lần chạy chương trình Mục đích việc lập trình với tập tin nhằm để lưu trữ liệu vào nhớ phụ truy xuất trở lại cần thiết Sưu tầm bởi: www.daihoc.com.vn Phân loại tập tin Tập tin văn xem nội dung lệnh type hệ điều hành DOS soạn thảo chương trình soạn thảo văn đơn giản Notepad Windows Tập tin nhị phân khơng có dạng văn ASCII ví dụ: tập tin mã thực thi hệ điều hành (.exe,.com), tập tin văn phức hợp (.doc), tập tin hình ảnh (.jpg) Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin Các thao tác với tập tin ln gồm bước sau đây: Mở tập tin để chuẩn bị làm việc Đọc ghi liệu Đóng tập tin Sưu tầm bởi: www.daihoc.com.vn Mở tập tin Dùng hàm fopen để mở tập tin theo cú pháp sau: FILE *fopen(const char *ten_tap_tin, const char *tuy_chon); Ví dụ: /* Mo tap tin ten la text.txt de ghi */ fopen( “text.txt” , ”wt” ); Sưu tầm bởi: www.daihoc.com.vn Mở tập tin Các tùy chọn có: r w a r+ w+ a+ mở file để đọc, file ko tồn tại, fopen trả NULL mở file để ghi, file ko tồn tại, tạo file mới, tồn tại, ghi đè lên file cũ ko cần hỏi mở file để thêm vào phía sau file tồn mở file để đọc viết, ghi đè lên phần liệu có mở file để đọc viết, xóa hồn tồn phần liệu cũ mở file để đọc thêm vào phía sau file cũ Sưu tầm bởi: www.daihoc.com.vn Mở tập tin Mặc định mở tập tin tập tin văn bản, để mở tập tin nhị phân, phần tùy chọn phải thêm vào ký tự “b”, tức “wb”, “rb” (b: binary) Có thể thêm ký tự “t” vào phần tùy chọn cho tập tin văn bản, không ghi (t: text) Sưu tầm bởi: www.daihoc.com.vn Mở tập tin Hàm fopen() trả NULL xảy lỗi: Sử dụng tên tập tin không quy tắc Mở tập tin chưa sẵn sàng (đĩa chưa format, chưa đóng ổ đĩa) Mở tập tin không tồn Bất sử dụng hàm fopen, phải kiểm tra kết trả xem có thực thành cơng hay không Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi int Đọc giá trị số (số nguyên, thực, ký tự ) fscanf(FILE *tap_tin, const char * format [ , argument , ] ); Ví d ụ /* doc mot so nguyen dua vao bien n tu tap tin duoc dai dien boi tro ten la fp */ fscanf(fp ,”%d” , &n); Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi Đọc giá trị chuỗi ký tự char * fgets (char * chuoi, int sokytu , FILE * tap_tin); Ví d ụ /* Doc mot chuoi ky tu chua toi da 20 ky tu tu tap tin duoc dai dien boi tro fp, dua vao bien chuoi ky tu ten la dong */ fgets(dong,20,fp); Sưu tầm bởi: www.daihoc.com.vn Các hàm đọc, ghi tập tin nhị phân Ghi size_t fwrite ( const void * vungnho, size_t sobyteghi, size_t solanghi, FILE * tap_tin ); Ví d ụ /* Ghi mau tin hs len tap tin dai dien boi tro fp, co kich thuoc bang (sizeof) kich thuoc cua mau tin HOCSINH*/ fwrite(&hs,sizeof(HOCSINH),1,fp); Sưu tầm bởi: www.daihoc.com.vn Xử lý tập tin gồm mẫu tin Mở tập tin hàm fopen với tùy chọn “r+b” để đọc ghi Đóng tập tin hàm fclose Có thể dùng hàm fseek để đưa định vị đọc ghi đến mẫu tin thích hợp Dùng hàm ftell để ghi nhận lại vị trí mẫu tin mà sau cập nhật liệu Vẫn đọc ghi hàm fread fwrite Sưu tầm bởi: www.daihoc.com.vn Tạo tập tin gồm mẫu tin Gồm bước: Tạo tập tin hàm fopen() với tùy chọn “wb” Gọi hàm fwrite() ghi liệu từ biến nhớ (là biến kiểu mẫu tin) vào tập tin Đóng tập tin hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Tạo tập tin gồm mẫu 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"); Sưu tầm bởi: www.daihoc.com.vn Tạo tập tin gồm mẫu tin if(fp!=NULL) { fwrite(dshs,sizeof(HOCSINH),3,fp); fclose(fp); return 1; } else { printf("Khong the tao tap tin!\n"); return 0; } } Sưu tầm bởi: www.daihoc.com.vn Thêm mẫu tin vào tập tin có sẵn Gồm bước: Gọi hàm fopen() với tùy chọn “ab” Gọi hàm fwrite() ghi liệu từ biến nhớ (là biến kiểu mẫu tin) vào tập tin Đóng tập tin hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Đọc danh sách mẫu tin từ tập tin Gồm bước: Gọi hàm fopen() với tùy chọn “rb” Gọi hàm fread() để đọc liệu từ tập tin vào biến nhớ (là biến kiểu mẫu tin) Đóng tập tin hàm fclose() Sưu tầm bởi: www.daihoc.com.vn Đọc danh sách mẫu tin từ tập 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 */ Sưu tầm bởi: www.daihoc.com.vn Đọc danh sách mẫu tin từ tập 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; } } Sưu tầm bởi: www.daihoc.com.vn Các hàm quản lý tập tin Xóa tập tin int remove ( const char *ten_tap_tin); Ví d ụ 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”); Sưu tầm bởi: www.daihoc.com.vn Các hàm quản lý tập tin Đổi tên tập tin int rename( const char *ten_cu, const char *ten_moi ); Ví d ụ 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) == ) printf(“Da doi ten tap tin”); else printf(“Loi doi ten tap tin”); Sưu tầm bởi: www.daihoc.com.vn Các hàm quản lý tập tin Sao chép tập tin Khơng có hàm sẵn thư viện Phải tự viết cách đọc ghi liệu dạng nhị phân Tham khảo hàm CopyFile sách trang 75 Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin Tên hàm Chức Loại tập tin fopen mở tập tin (tập tin có sẵn) ghi liệu vào tập tin văn bản, nhị phân đọc liệu từ tập tin vào biến số nguyên, thực, ký tự đọc liệu dòng ký tự từ tập tin vào biến chuỗi ký tự văn fprintf fscanf fgets Sưu tầm bởi: www.daihoc.com.vn văn văn Kỹ thuật lập trình tập tin Tên hàm Chức Loại tập tin fread đọc liệu từ tập tin vào biến ghi liệu vào tập tin nhị phân đóng tập tin sau thao tác kiểm tra đến cuối tập tin hay chưa lấy vị trí văn bản, nhị phân văn bản, nhị phân văn bản, nhị phân fwrite fclose feof ftell Sưu tầm bởi: www.daihoc.com.vn nhị phân Sưu tầm bởi: www.daihoc.com.vn ... điều hành (.exe,.com), tập tin văn phức hợp (.doc), tập tin hình ảnh (.jpg) Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin Các thao tác với tập tin ln gồm bước sau đây: Mở tập tin. .. phân Tham khảo hàm CopyFile sách trang 75 Sưu tầm bởi: www.daihoc.com.vn Kỹ thuật lập trình tập tin Tên hàm Chức Loại tập tin fopen mở tập tin (tập tin có sẵn) ghi liệu vào tập tin văn bản, nhị... www.daihoc.com.vn Xử lý tập tin gồm mẫu tin Mở tập tin hàm fopen với tùy chọn “r+b” để đọc ghi Đóng tập tin hàm fclose Có thể dùng hàm fseek để đưa định vị đọc ghi đến mẫu tin thích hợp Dùng hàm ftell