You are on page 1of 6

1

TẬ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.
o 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 (2byte) và dạng chuỗi (5byte)
o 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 ă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.
o 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
o 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, *.WAV, *.AVI,…

2. Mt s hàm x lí chung cho c hai dng tp tin (xem thêm MSDN)

Tên hàm Cú Pháp Ý nghĩa tham số Chức năng


fopen FILE *fopen( Mở tập tin theo kiểu
const char *filename, //Tên file văn bản hoặc nhị
const char *mode //Kiểu truy cập cho phép (*) phân
);
fclose int fclose( Đóng tập tin
FILE *stream //Con trỏ tới cấu trúc FILE.

GVHDTH: Nguyễn Thị Hồng Nhung – Nguyễn Quốc Bình


2

);
fcloseall int _fcloseall( void ); Đóng tất cả các tập
tin
fflush int fflush( Làm sạch vùng đệm
FILE *stream //Con trỏ tới cấu trúc FILE. của một tập tin đang
); mở
fflushall int flushall( void ); Làm sạch vùng đệm
của tất cả các tập tin
đang mở
remove/unlink int remove ( Xóa tập tin
const char *filename //Tên file
);
int _unlink(
const char *filename //Tên file
);

3. Mt s hàm x lí dùng cho tp tin văn bn (xem thêm MSDN)

Tên hàm Cú pháp Ý nghĩa tham số Chức năng

fopen FILE *fopen( Mở tập tin theo kiểu văn bản


const char *filename, //Tên file hoặc nhị phân
const char *mode //Kiểu truy cập cho phép (*)
);
fclose int fclose( Đóng tập tin
FILE *stream //Con trỏ tới cấu trúc FILE.
);
fcloseall int _fcloseall( void ); Đóng tất cả các tập tin
fprintf int fprintf( Ghi giá trị dạng text lên tập
FILE *stream, //Con trỏ tới cấu trúc FILE. tin
const char *format [, //Chuỗi điều khiển định dạng
argument ]... //Tham số tùy chọn.
);
fscanf int fscanf( Đọc giá trị dạng text từ tập
FILE *stream, //Con trỏ tới cấu trúc FILE. tin
const char *format [, //Chuỗi điều khiển định dạng
argument ]... //Tham số tùy chọn.
);
fflush int fflush( Làm sạch vùng đệm của một
FILE *stream //Con trỏ tới cấu trúc FILE. tập tin đang mở
);
fflushall int flushall( void ); Làm sạch vùng đệm của tất
cả các tập tin đang mở
remove/unlink int remove ( Xóa tập tin
const char *filename //Tên file
);
int _unlink(
const char *filename //Tên file
);

GVHDTH: Nguyễn Thị Hồng Nhung – Nguyễn Quốc Bình


3

putc/fputc int putc( Ghi lên tập tin một kí tự (sử


int c, //Kí tự muốn viết. dụng trong tập tin văn bản
FILE *stream //Con trỏ tới cấu trúc FILE. hoặc nhị phân có khác biệt)
);
int fputc(
int c, //Kí tự muốn viết.
FILE *stream //Con trỏ tới cấu trúc FILE.
);
getc/fgetc int getc( Đọc từ tập tin một kí tự (sử
FILE *stream //Con trỏ tới cấu trúc FILE. dụng trong tập tin văn bản
); hoặc nhị phân có khác biệt)
int fgetc(
FILE *stream //Con trỏ tới cấu trúc FILE.
);

(*) Một số kiểu truy cập cơ bản:

Chuỗi Ý nghĩa
"r" Mở 1 file để đọc. File đó phải đã tồn tại.
"w" Tạo 1 file rỗng để ghi. Nếu 1 file có cùng tên với file đã tồn tại thì nội dung của nó sẽ bị ghi đè.
"a" Thêm (Append) vào file. Các toán tử thêm dữ liệu vào cuối file.
"r+" Mở 1 file để cập nhật (đọc và ghi). File đó phải đã tồn tại.
"w+" Tạo một file rỗng để đọc và ghi. Nếu 1 file có cùng tên với file đã tồn tại thì nội dung của nó sẽ
bị ghi đè.
"a+" Mở 1 file để đọc và thêm. Tất cả các toán tử ghi được thực hiện ở cuối file để không ghi đè lên
phần phía trước. Bạn có thể đặt lại vị trí con trỏ (fseek, rewind) tới bất kì vị trí nào để đọc, nhưng
với toán tử ghi thì con trỏ sẽ được lùi về phía cuối file. File sẽ được tạo mới nếu chưa tồn tại.

Chuỗi Ý nghĩa
thêm
"b" Các mode này mở file theo dạng text file. Để mở theo dạng binary file, ta thêm kí tự "b" vào
chuỗi mode.

"t" Mở theo text mode. Ctrl + Z được xem như là một kí tự kết thúc file khi nhập.
Trong các file được mở cho đọc/ghi với "a+", fopen kiểm tra tổ hợp phím CTRL + Z có ở
cuối tập tin không và loại bỏ nó, nếu có thể.

Cách ghi:

o Thêm vào cuối:


 "rb", "wb", "ab", "r+b", "w+b", "a+b"
 "rt", "wt", "at", "r+t", "w+t", "a+t"
o Thêm giữa chữ và dấu "+":
 "rb+", "wb+", "ab+"
 "rt+", "wt+", "at+"

GVHDTH: Nguyễn Thị Hồng Nhung – Nguyễn Quốc Bình


4

4. Mt s hàm x lí dùng cho tp tin nh phân (xem thêm MSDN)

Tên hàm Cú pháp Ý nghĩa tham số Chức năng


putw int _putw( Ghi một số nguyên lên
int binint, //Binary integer to be output. tập tin
FILE *stream //Con trỏ tới cấu trúc FILE.
);
getw int _getw( Đọc một số nguyên từ
FILE *stream //Con trỏ tới cấu trúc FILE. tập tin
);

fwrite size_t fwrite( Ghi các mẫu tin (có cấu


const void* buffer, //Con trỏ tới dữ liêu muốn ghi. trúc định trước) lên tập
size_t size, //Kích thước của item tính theo byte tin
size_t count, //Số item tối đa được ghi.
FILE* stream //Con trỏ tới cấu trúc FILE.
);
fread size_t fread( Đọc các mẫu tin (có cấu
void* buffer, //Con trỏ tới dữ liêu muốn ghi. trúc định trước) từ tập
size_t size, //Kích thước của item tính theo byte tin
size_t count, //Số item tối đa được ghi.
FILE* stream //Con trỏ tới cấu trúc FILE.
);
fseek int fseek( Di chuyển con trỏ chỉ vị
FILE *stream, //Con trỏ tới cấu trúc FILE. đến vị trí mong muốn
long offset, //Số byte từ origin.
int origin //Vị trí ban đầu.
);
ftell long ftell( Cho biết vị trí hiện tại
FILE* stream //Con trỏ tới cấu trúc FILE. của con trỏ chỉ vị
);

5. Các ví d v đc/ghi tp tin văn bn và nh phân

Ghi tp tin văn bn

#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);
}

GVHDTH: Nguyễn Thị Hồng Nhung – Nguyễn Quốc Bình


5

Đc tp tin văn bn

#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 tp 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", "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 tp tin nh phân

#include <stdio.h>
typedef struct
{

GVHDTH: Nguyễn Thị Hồng Nhung – Nguyễn Quốc Bình


6

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);
}

GVHDTH: Nguyễn Thị Hồng Nhung – Nguyễn Quốc Bình