Bài giảng Ngôn ngữ lập trình C - Chương 9: Lập trình với tập tin
Các hàm nhập xuất theo kiểu nhị phân
int fwrite(coid *ptr, int size, int n, FILE *fp);
• Ghi n mẫu tin kích thước size byte từ vùng nhớ được trỏ bởi ptr lên tập tin
fp. Hàm trả về một gí trị bằng số mẫu tin thực sự ghi được.
int fread(coid *ptr, int size, int n, FILE *fp);
• Đọc n mẫu tin kích thước size byte từ tập tin fp chứa vào vùng nhớ được
trỏ bởi ptr. Hàm trả về một gí trị bằng số mẫu tin thực sự đọc được.
void rewind(FILE *fp);
• Chuyển con trỏ chỉ vị của tập tin fp về đầu tập tin. Khi đó việc truy xuất
trên tập tin fp được thực từ đầu tập tin.
int fseek(FILE *fp, long sb, int xp);
• Hàm di chuyển con trỏ chỉ vị của tập tin từ vị trí xác định bởi xp qua một
số byte bằng giá trị tuyệt đối của sb. Chiều di chuyển là vế cuối tập tin nếu
sb dương, ngược lại sẽ di chuyển vế phía đầu tập tin. Nếu thành công hàm
trả về giá trị 0, ngươc lại hàm trả vế giá trị khác không.
long ftell(FILE *fp);
• Nếu thành công hàm trả về vị trí hiện tại của con trỏ chỉ vị (byte thứ mấy
trên tâp tin fp). Số thứ tự của byte được tính từ 0. Nếu có lỗi hàm trả về -1L.
9 trang |
Chia sẻ: maiphuongtl | Lượt xem: 2028 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Bài giảng Ngôn ngữ lập trình C - Chương 9: Lập trình với tập tin, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 9: LẬP TRÌNH VỚI TẬP TIN
• Nội dung
Tập tin văn bản
Tập tin nhị phân
Con trỏ chỉ vị
Vùng đệm
Đóng mở tập tin, xóa vùng đệm
Nhập xuất ký tự
Các hàm nhập xuất theo kiểu văn bản
Các hàm nhập xuất theo kiểu nhị phân
Khái niệm
Tập tin là tập hợp các thông tin được đóng gói trên thiết bị lưu trữ.
Khi sử dụng tập tin dữ liệu được lưu trữ lâu dài và không bị mất khi tắt
máy tính. Ngoài ra khi cần thiết có thể truy xuất lại các dữ liệu này.
Tập tin văn bản
Đây là các tâp tin có thể xem và chỉnh sửa nội dung các tập tin bằng các
chương trình soạn thảo văn bản đơn giản như: các hệ soạn thảo mã nguồn
chương trình, chương trình Notepad của Windows, …
Mỗi tâp tin văn bản được lưu trữ dưới dạng văn bản(text) gồm nhiều dòng.
Tập tin nhị phân
Đây là tất cả các tập tin khác không có dạng văn bản. Mỗi tập tin nhị phân
do một phần mềm nào tạo ra thì sẽ có cấu trúc do phần mềm đó quy định.
Một số loại tập tin nhị phân thông dụng như:
Các tâp tin mã thực thi trên các hệ điều hành: *.exe, *.com
Các tập tin văn bản phức hợp: *.doc
Các tập tin bảng tính: *.xls
Các tập tin hình ảnh: *.bmp, *.gif, …
Con trỏ chỉ vị
• Khi một tập tin được mở để chuẩn bị làm việc, tùy theo cách thức mở tập
tin, một con trỏ chỉ vị sẽ được đặt tại vị trí đầu tập tin hoặc tại ví trí cuối tập
tin. Mỗi thao tác đọc/ghi sẽ tác động lên con trỏ chỉ vị của tâp tin, dữ liệu
tại đó sẽ bị thay đổi nếu đó là thao tác ghi lên tập tin. Sau khi thực hiện một
thao tác đọc/ghi, con trỏ chỉ vị tự động được dời đi một số byte đúng bằng
số byte đọc/ghi . Một thao tác đọc/ghi kế tiếp sẽ tác động lên vị trí mới của
con trỏ chỉ vị trên tập tin.
Vùng đệm
• Mỗi lần đọc/ghi thì thường tiến hành trên vùng đệm chứ không hẳn trên tập
tin. Chẳng hạn khi ghi một số nguyên thì số được đưa vào vùng đệm và khi
nào đầy thì vùng đệm mới được đẩy lên đĩa. Khi đọc, thông tin được lấy từ
vùng đệm, và chỉ khi nào vùng đệm đã trống rỗng thì máy mới lấy dữ liệu
từ đĩa chứa vào vùng đệm. Việc sử dụng vùng đệm sẽ giảm số lần nhập
xuất trên đĩa và nâng cao tốc tốc độ làm việc.
Đóng mở tập tin, xóa vùng đệm
• Các hàm trong mục này dùng chung cho hai kiểu nhị phân và văn bản
FILE *fopen(char *têntậptin, char *kiểu);
• Kiểu có thể có các giá trị sau:
• “”r” “rt” Mở một tập tin để đọc theo kiểu văn bản. Tập tin cần tồn
tại nếu không sẽ có lỗi.
• ”w” “wt” Mở một tập tin mới để ghi theo kiểu văn bản. Nếu tập tin
đã tồn tại nó bị xóa.
• “a” “at” Mở một tập tin để ghi bổ sung theo kiểu văn bản. Nếu tập
tin chưa tồn tại thì tạo tập tin mới.
• “rb” Mở một tập tin để đọc theo kiểu nhị phân. Tập tin cần tồn
tại nếu không sẽ có lỗi.
• “wt” Mở một tập tin mới để ghi theo kiểu nhị phân. Nếu tập tin
đãõtồn tại nó bị xóa.
• “at” Mở một tập tin để ghi bổ sung theo kiểu nhị phân. Nếu
tập tin chưa tồn tại thì tạo tập tin mới.
• “r+” “r+t” Mở một tập tin để đọc/ghi theo kiểu văn bản. Tập tin cần
tồn tại nếu không sẽ có lỗi.
• ”w+” “w+t” Mở một tập tin mới để đọc/ghi theo kiểu văn bản. Nếu tập
tin đãõ tồn tại nó bị xóa.
• “a+” “a+t” Mở một tập tin để đọc/ghi bổ sung theo kiểu văn bản. Nếu
tập tin chưa tồn tại thì tạo tập tin mới.
• “r+b” Mở một tập tin để đọc/ghi theo kiểu nhị phân. Tập tin cần
tồn tại nếu không sẽ có lỗi.
• “w+b” Mở một tập tin mới để đọc/ghi theo kiểu nhị phân. Nếu
tập tin đãõ tồn tại nó bị xóa.
• “a+b” Mở một tập tin để đọc/ghi bổ sung theo kiểu nhị phân.
Nếu tập tin chưa tồn tại thì tạo tập tin mới.
• Hàm dùng để mở tập tin. Nếu thành công hàm cho con trỏ kiểu FILE ứng
với tập tin vừa mở. Các hàm thao tác tập tin sẽ làm việc với tập tin thông
qua con trỏ này. Nếu có lỗi hàm trả về giá trị NULL.
• Chú ý: Trong các kiểu đọc/ghi, cần làm sạch vùng đệm trước khi chuyển
từ đọc sang ghi hoặc từ ghi sang đọc.
int fclose(FILE *fp);
• Hàm dùng để đóng tập tin. Nếu thành công hàm trả về giá trị 0, ngược lại
hàm trả về giá trị EOF(số -1).
int fflush(FILE *fp);
• Hàm dùng làm sạch vùng đệm của tập tin fp. Nếu thành công hàm trả về
giá trị 0, ngược lại hàm trả về giá trị EOF( số -1).
int feof(FILE fp);
• Hàm dùng để kiểm tra cuối tập tin. Hàm trả về giá trị khác 0 nếu gặp cuối
tập tin khi đọc, ngược lại hàm trả về giá trị 0.
Nhập xuất ký tự
• Các hàm sau đây dùng được trong cả kiểu nhị phân và kiểu văn bản.
int fputc(int ch, FILE *fp);
• Hàm ghi lên tập tin một ký tự có mã ch%256 trong đó ch được xem là số
nguyên không dấu. Nếu thành công hàm trả về mã ký tự được ghi, ngược
lại hàm trả về EOF.
int fgetc(FILE *fp);
• Hàm đọc một ký tự từ tâp tin fp. Nếu thành công hàm trả về mã đọc được
(có giá trị từ 0 đến 255), ngược lại nếu gặp cuối tập tin hay có lỗi hàm trả
về EOF.
Các hàm nhập xuất theo kiểu văn bản
int fprintf(FILE *fp, “chuỗi định dạng”[, danh sách các đối]);
• Giá trị của các đối được ghi lên tập tin fp theo khuôn dạng xác định trong
chuỗi định dạng. Nếu thành công hàm trả về một giá trị nguyên bằng số
byte ghi lên tập tin, ngược lại hàm trả vế EOF.
int fscanf(FILE *fp, “chuỗi định dạng”[, danh sách các đối]);
• Đọc dữ liệu từ tập tin fp, biến đổi theo khuôn dạng xác định trong chuỗi
định dạng và lưu kết quả vào đối. Hàm trả về một giá trị bằng số trường
đọc được.
Các hàm nhập xuất theo kiểu nhị phân
int fwrite(coid *ptr, int size, int n, FILE *fp);
• Ghi n mẫu tin kích thước size byte từ vùng nhớ được trỏ bởi ptr lên tập tin
fp. Hàm trả về một gí trị bằng số mẫu tin thực sự ghi được.
int fread(coid *ptr, int size, int n, FILE *fp);
• Đọc n mẫu tin kích thước size byte từ tập tin fp chứa vào vùng nhớ được
trỏ bởi ptr. Hàm trả về một gí trị bằng số mẫu tin thực sự đọc được.
void rewind(FILE *fp);
• Chuyển con trỏ chỉ vị của tập tin fp về đầu tập tin. Khi đó việc truy xuất
trên tập tin fp được thực từ đầu tập tin.
int fseek(FILE *fp, long sb, int xp);
• Hàm di chuyển con trỏ chỉ vị của tập tin từ vị trí xác định bởi xp qua một
số byte bằng giá trị tuyệt đối của sb. Chiều di chuyển là vế cuối tập tin nếu
sb dương, ngược lại sẽ di chuyển vế phía đầu tập tin. Nếu thành công hàm
trả về giá trị 0, ngươc lại hàm trả vế giá trị khác không.
long ftell(FILE *fp);
• Nếu thành công hàm trả về vị trí hiện tại của con trỏ chỉ vị (byte thứ mấy
trên tâp tin fp). Số thứ tự của byte được tính từ 0. Nếu có lỗi hàm trả về -
1L.
Các file đính kèm theo tài liệu này:
- chuong_9_7918.pdf