Phân loại Tập tin là hình thức lưu trữ phổ biến trên bộ nhớ phụ, gồm 2 loại: Ø Tập tin văn bản: là tập tin chỉ lưu trữ thuần túy văn bản, trong đó các kí tự được biểu diễn bằng mã ASCI
Trang 1TẬP TIN VĂN BẢN – TẬP TIN NHỊ PHÂN
1 Phân loại
Tập tin là hình thức lưu trữ phổ biến trên bộ nhớ phụ, gồm 2 loại:
Ø Tập tin văn bản: là tập tin chỉ lưu trữ thuần túy văn bản, trong đó các kí tự
được biểu diễn bằng mã ASCII của nó, người dùng có thể đọc được
Tính chất:
§ Dễ truy xuất và xử lí
§ Độ bảo mật kém
§ Tốc độ truy xuất kém
§ Kích thước lớn
- Vd: Lưu số nguyên 12345 ở dạng binary (2 byte) và dạng chuỗi (5 byte)
Các dạng thường gặp:
§ Tập tin cấu hình: *.INI, *.CFG
§ *.TXT, *.HTML, *.XML
Ø Tập tin nhị phân: là tập tin chứa dữ liệu mà có ít nhất một vài chuỗi bit
không thể biểu diễn ở dạng văn bản trơn, do đó tập tin này chỉ có máy đọc được còn người dùng không đọc được
Tính chất:
§ Truy xuất và xử lí phức tạp hơn
§ Tốc độ truy xuất nhanh
§ Tính bảo mật cao hơn
Các dạng thường gặp:
§ Các tập tin có cấu trúc tự định nghĩa
§ *.DOC, *XLS, *PDF, *PPT
§ *.JPG, *.PCX, *.BMP,*.TIF
§ *.MP3, *.WA V , *.A VI,…
Trang 22 Một số hàm xử lí chung cho cả hai dạng tập tin (xem MSDN)
fopen Mở tập tin theo kiểu văn bản hoặc nhị phân
fclose Đóng tập tin
fcloseall Đóng tất cả các tập tin
fflush Làm sạch vùng đệm của một tập tin đang mở
fflushall Làm sạch vùng đệm của tất cả các tập tin đang mở
remove/unlink Xóa tập tin
3 Một số hàm xử lí dùng cho tập tin văn bản (xem MSDN)
fopen Mở tập tin theo kiểu văn bản hoặc nhị phân
fclose Đóng tập tin
fcloseall Đóng tất cả các tập tin
fprintf Ghi giá trị dạng text lên tập tin
fscanf Đọc giá trị dạng text từ tập tin
fflush Làm sạch vùng đệm của một tập tin đang mở
fflushall Làm sạch vùng đệm của tất cả các tập tin đang mở
remove/unlink Xóa tập tin
putc/fputc Ghi lên tập tin một kí tự (sử dụng trong tập tin văn bản hoặc nhị
phân có khác biệt)
getc/fgetc Đọc từ tập tin một kí tự (sử dụng trong tập tin văn bản hoặc nhị
phân có khác biệt)
4 Một số hàm xử lí dùng cho tập tin nhị phân (xem MSDN)
putw Ghi một số nguyên lên tập tin
getw Đọc một số nguyên từ tập tin
Trang 3fwrite Ghi các mẫu tin (có cấu trúc định trước) lên tập tin
fread Đọc các mẫu tin (có cấu trúc định trước) từ tập tin
fseek Di chuyển con trỏ chỉ vị đến vị trí mong muốn
ftell Cho biết vị trí hiện tại của con trỏ chỉ vị
5 Các ví dụ về đọc/ghi tập tin văn bản và nhị phân
Ghi tập tin văn bản
#include <stdio.h>
void main()
{
int a[10] = {10,9,8,7,6,5,4,3,2,1};
FILE *f = fopen("number_text.txt", "wt");
for (int i = 0; i < 10; i++)
{
printf("%3d", a[i]);
fprintf(f,"%d\n",a[i]);
}
fclose(f);
}
Đọc tập tin văn bản
#include <stdio.h>
void main()
{
int a;
FILE *f = fopen("number_text.txt", "rt"); // mở tập tin để đọc dạng text
while (!feof(f)) // kiểm tra đến cuối tập tin chưa
{
fscanf(f,"%d",&a); // đọc dữ liệu dạng text vào biến a
printf("%3d", a);
}
fclose(f); // đóng tập tin sau khi làm xong
}
Ghi tập tin nhị phân
#include <stdio.h>
typedef struct
{
char mssv[10];
char name[30];
}SV;
Trang 4void main()
{
int i;
SV arr[5];
FILE *f = fopen("number_binary.bin", "wb");
for (i = 0; i < 5; i++){
printf("Nhap MSSV: ");
gets(arr[i].mssv);
printf("Nhap ten: ");
gets(arr[i].name);
}
for (i = 0; i < 5; i++)
fwrite(&arr[i], sizeof(SV), 1, f);
fclose(f);
}
Đọc tập tin nhị phân
#include <stdio.h>
typedef struct
{
char mssv[10];
char name[30];
}SV;
void main()
{
int i;
SV arr[5];
FILE *f = fopen("number_binary.bin", "rb");
for (i = 0; i < 5; i++)
{
fread(&arr[i], sizeof(SV), 1, f);
printf("MSSV: %s\nHo ten: %s\n\n", arr[i].mssv, arr[i].name); }
fclose(f);
}