Các thao tác cơ bản trên tập tin

Tóm tắt các hàm liên quan đến truy xuất tập tin văn bản & tập tin nhị phân trong ngôn ngữ C.

A. Con trỏ file (file pointer)

Khi thao tác với tập tin trong C, ta cần một con trỏ file để giúp chương trình định vị tập tin (đường dẫn) cũng như vị trí trong tập tin đang làm việc. Cú pháp khai báo như sau:

FILE *f;

B. Mở tập tin

Trước khi thao tác với tập tin thông qua con trỏ file, ta cần mở tập tin bằng lời gọi đến hàm fopen. Hàm này sẽ nhận đầu vào là đường dẫn đến tập tin path và chế độ mở tập tin mode (mở để đọc, ghi mới hay ghi thêm). Hàm trả về con trỏ file đại diện cho tập tin này. Cú pháp như sau:

FILE *fopen(const char *path, const char *mode);

Có những chế độ mở tập tin như sau:

MODE Ý NGHĨA GHI CHÚ
r Mở để đọc  
w Mở để ghi Tập tin không cần phải tồn tại.
a Mở để thêm mới  
r+ Mở để đọc và ghi Bắt đầu từ đầu tập tin
w+ Mở để đọc và ghi Ghi đè lên tập tin
a+ Mở để đọc và ghi Ghi thêm (append) nếu tập tin tồn tại

Ví dụ: Mở tậptin có tên mang.txt trong thư mục abc trong thư mục hiện tại của chương trình để đọc.

FILE *f = fopen("/abc/mang.txt", "r");

Chú ý: để thao tác trên tập tin nhị phân, ta sử dụng các giá trị tương ứng sau:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

C. Thao tác trên tập tin văn bản

Các hàm dưới đây đều có phiên bản tương tự nhưng thao tác trên thiết bị xuất chuẩn (màn hình) hoặc thiết bị nhập chuẩn (bàn phím), ví dụ: với hàm fprintf thì có hàm printf, với hàm fscanf thì có hàm scanf,... Cách sử dụng những hàm hày hoàn toàn giống nhau, chỉ khác là ở đây có thêm tham số là con trỏ file (ở đầu hoặc cuối). Ví dụ, hàm fprintf sử dụng hoàn toàn giống với hàm printfchỉ khác là có thêm tham số con trỏ file ở đầu.

1. Hàm fprintf

Cú pháp:

int fprintf(FILE *f,const char *format, ...)

Ví dụ:

fprintf(f, "Tong la: %d", s);

2. Hàm fscanf

Cú pháp:

int fscanf(FILE *f, const char *format, ...)

Ví dụ:

fscanf(f, "%d", &n);

3. Hàm fputs

Cú pháp:

int fputs(const char *s, FILE *f )

Ví dụ:

fputs("Con co be be", f);

4. Hàm fgets

Cú pháp:

char *fgets(char *buf, int n, FILE *f)

Ví dụ:

char s1[30]; //chuỗi s1 được cấp phát "tĩnh" nên không cần phải cấp phát động (malloc/calloc)
fgets(s1, 30, f);
char *s2;
s2 = (char *)malloc(30*sizeof(char)); //không như s1, ở đây ta phải cấp phát "động" vùng nhớ cho s2
fgets(s2, 30, f);

5. Hàm fputc

Cú pháp:

int fputc(int c, FILE *f )

Ví dụ:

fputc('a', f);

6. Hàm fgetc

Cú pháp:

int fgetc(FILE *f)

Ví dụ:

char c1,c2;
c1 = fgetc(f);
c2 = fgetc(f);

D. Thao tác trên tập tin nhị phân

1. Hàm fwrite

Cú pháp:

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

2. Hàm fread

Cú pháp:

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

E. Đóng tập tin

Để kết thúc các thao tác trên tập tin, ta cần phải đóng tập tin bằng cách gọi hàm fclose. Cú pháp:

int fclose(FILE *f);

Ví dụ:

fclose(f);