Xem mẫu
- Chương 09
TẬP TIN
Trần Quang Kỹ thuật lập trình
Chương 09: File
1
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Mô 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à
biết kết thúc tập tin.
(Nhiều hệ thống EOF = -1)
… EOF
1 2 3 N
N bytes dữ liệu của một file
Trần Quang Kỹ thuật lập trình
Chương 09: File
3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Quy trình xử lý tập tin
1. Khai báo con trỏ tập tin
2. Mở tập tin
Dùng hàm: fopen
3. Thao tác với tập tin
Đọc hay ghi dữ liệu
Mỗi lần đọc hay ghi dữ liệu, con trỏ đánh dấu trong
tập tin tự động tăng đến phần tử tiếp theo
4. Đóng tập tin
Dùng hàm fclose
Trần Quang Kỹ thuật lập trình
Chương 09: File
5
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
6
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Con trỏ đánh dấu trong tập tin
1 2 3 N
… EOF
Sau khi đã đọc xong N bytes,
con trỏ đánh dấu chỉ đến EOF
Lần đọc dữ liệu kế tiếp hàm đọc sẽ trả về
giá trị EOF cho biết đã kết thúc tập tin
Trần Quang Kỹ thuật lập trình
Chương 09: File
7
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
8
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Mở tập tin
fopen (, );
Ví dụ: FILE *fp;
fp = fopen("c:\\test.txt", "r");
filename là tên tập tin trên đĩa, chú ý dùng \\ trong
đường dẫn
Trần Quang Kỹ thuật lập trình
Chương 09: File
9
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
10
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Kiểm tra việc mở tập tin
FILE *fp;
fp = fopen ("E:\\tmp\\vidu.txt", "r");
if (fp == NULL)
printf("Khong mo duoc file\n");
else {
// xử lý file
}
if (fp == NULL) {
printf("Khong mo duoc file\n");
return;
}
// xử lý file
Trần Quang Kỹ thuật lập trình
Chương 09: File
11
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Đó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
12
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Đọc 1 ký tự từ tập tin
Cú pháp:
int fgetc (FILE *fp);
Ví dụ:
char c;
FILE *fp;
fp = fopen ("E:\\tmp\\vidu.txt", "r");
c = fgetc (fp);
Trần Quang Kỹ thuật lập trình
Chương 09: File
13
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Đọc 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){
int i = 0;
int ch = fgetc(fp);
while(ch != EOF){ CH = Đọc một ký tự
buffer[i] = ch;
false
ch = fgetc(fp); CH EOF
i += 1; true
} Đưa CH vào bộ đệm
CH = Đọc một ký tự
buffer[i] = '\0';
}
Trần Quang Kỹ thuật lập trình
Chương 09: File
15
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- Hà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
Trần Quang Kỹ thuật lập trình
Chương 09: File
17
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
18
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- fgets() – fputs()
Ví dụ:
char s[100];
FILE *fp;
fp = fopen ("E:\\tmp\\vidu.txt","w+");
if (fp==NULL) return 0;
fputs ("Tran van Hung\n", fp);
fputs ("Le Thi Thu Thao\n", fp);
rewind(fp);
fgets (s,100, fp);
printf ("%s", s); // Tran Van Hung
Trần Quang Kỹ thuật lập trình
Chương 09: File
19
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
- 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
20
CuuDuongThanCong.com https://fb.com/tailieudientucntt
© 2016
nguon tai.lieu . vn