Bài giảng Kỹ thuật lập trình - Chương 9: Tập tin - Trần Quang

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.

Ô

BK

TP.HCM

pdf 33 trang xuanthi 27/12/2022 1440
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 9: Tập tin - Trần Quang", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_chuong_9_tap_tin_tran_quang.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 9: Tập tin - Trần Quang

  1. 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 Kỹ thuật lập trình Chương 09: File © 2016 2
  2. Các loại tập tin  Tập tin văn bản (text)  Các byte trong mô hình tập tin chứa các ký tự đọc được (có nghĩa) bởi con người  Tập tin có thể mở ra để đọc và thay đổi bởi chương trình soạn thảo văn bản như NOTEPAD.  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, Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 4
  3. Con trỏ đánh dấu trong tập tin N bytes dữ liệu của một file 1 2 3 N 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 1 2 3 N EOF Sau khi đọc 1 byte dữ liệu, ví dụ sử dụng hàm fgetc() Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 6
  4. Khai báo con trỏ tập tin (FILE *)  Biến (con trỏ) trong chương trình dùng để gắn kết với tập tin trên đĩa được định nghĩa với kiểu đặc biệt theo cú pháp sau: FILE * Ví dụ: FILE *fp;  Kiểu FILE là kiểu cấu trúc do C định nghĩa sẵn trong Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 8
  5. Chế độ mởtập tin Chế độ Mô tả r Mở tập tin để đọc. Mở tập tin để ghi. Nếu tập tin đã tồn tại, xóa toàn bộ w nội dung tập tin đó. Nối tập tin. Mở tập tin đã có sẵn hoặc tạo mới tập tin, a ghi vào cuối tập tin nếu đã tồn tại. Mở tập tin cho phép đọc lẫn ghi. Không tạo mới tập r+ tin nếu tập tin chưa có sẵn. Mở tập tin cho phép đọc lẫn ghi. Tạo mới tập tin nếu w+ tập tin chưa có sẵn. Nối tập tin, cho phép đọc tập tin. Mở tập tin đã có a+ sẵn hoặc tạo mới tập tin, ghi vào cuối tập tin đó. Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 10
  6. Đóng tập tin  Cú pháp: int fclose (FILE *fp); Ví dụ: fclose(fp); Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 12
  7. Hà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.  Ví dụ: char c; FILE *fp; fp = fopen("E:\\tmp\\vidu.txt", "r"); while ( !feof(fp) ) { c = fgetc(fp); printf("%c", c); } Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 14
  8. Ghi 1 ký tự vào tập tin  Cú pháp: int fputc (char c, FILE *fp); Ví dụ: FILE *fp; fp = fopen ("E:\\tmp\\vidu2.txt", "w"); fputc ('A', fp); Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 16
  9. fgets() – fputs() Ví dụ: char s[255]; FILE *fp; printf ("Nhap vao 1 cau: "); fgets (s, 255, stdin); fp = fopen ("E:\\tmp\\vidu.txt","w+"); fputs (s, fp); Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 18
  10. Hàm fscanf( )  Hàm thư viện đọc dữ liệu từ tập tin theo định dạng: fscanf ( , , );  Việc sử dụng hàm fscanf() tương tự như hàm scanf(), chỉ có khác ở chỗ những gì lẽ ra nhập từ bàn phím sẽ được đọc vào từ tập tin.  Ví dụ: fscanf (fp, "%d", &n); fscanf (fp, "%f", &(sv1->diem_btl); Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 20
  11. Di chuyển con trỏ đến 1 vị trí mới  Cú pháp: int fseek (FILE *fp, long sb, int xp); Trong đó  sb là số byte cần di chuyển.  xp cho biết vị trí xuất phát mà việc dịch chuyển được bắt đầu từ đó. xp có thể nhận các giá trị sau:  SEEK_SET hay 0 : Xuất phát từ đầu file.  SEEK_CUR hay 1: Xuất phát từ vị trí hiện tại của con trỏ chỉ vị trí.  SEEK_END hay 2 : Xuất phát từ cuối file. Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 22
  12. Di chuyển con trỏ về đầu tập tin  Cú pháp: int rewind (FILE *fp);  Ví dụ: while (!feof(fp)) { a = getc(fp); printf("%c", a); } printf("\n"); rewind(fp); while (!feof(fp)) { a = getc(fp); printf("%c", a); } Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 24
  13. Random - Access File Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 26
  14. struct  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; }; Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 28
  15. Hàm fread()  Cú pháp: size_t fread( void *buffer, size_t size, size_t count, FILE *fp);  Tham số:  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.  fp: con trỏ file  Ghi chú:  Hàm fread( ) đọc dữ liệu từ file, khác với hàm fscanf( ) ở chỗ có thể đọc cả struct, object, (đọc cả khối dữ liệu chỉ cần biết kích thước và cấu trúc).  Trả về số lượng data đọc được nếu thành công.  Nếu xảy ra lỗi hoặc gặp cuối file, hàm sẽ trả về số nguyên nhỏ hơn số lượng data được ghi. Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 30
  16. Ví dụ về hàm fread() và fwrite() struct Date { int d, m, y; }; FILE *fp; struct Date ns1 = {30, 4, 2015}, ns2; fp = fopen ("E:\\tmp\\data.dat","w+"); if (fwrite(&ns1, sizeof(ns1), 1, fp) != 1) { printf ("Error writting"); return 0; } rewind(fp); if (fread (&ns2, sizeof(ns2), 1, fp) != 1) printf ("\nError reading "); else printf ("\nNgay sinh: %.2d/%.2d/%.4d", ns2.d, ns2.m, ns2.y); fclose(fp); Trần Quang Kỹ thuật lập trình Chương 09: File © 2016 32