Mở tệp
Cú pháp: name = fopen(filename, mode);
Trong đó:
filename: là một hằng xâu ký tự thể hiện tên của tệp cùng với đường dẫn của nó trên bộ nhớ ngoài.
mode: là một hằng xâu ký tự thể hiện chế độ xử lý
tệp, quy định cách xử lý tệp đã mở.
Ví dụ
f=fopen(“D:TCbt1.txt”,”w”);
f=fopen(“D:TCbt2.txt”,”r”);
07/2020 Cơ sở lập trình193
Ý nghĩa | |
‘”r” | Mở tệp văn bản đã tồn tại để đọc |
“w” | Mở tệp văn bản mới để ghi. Nếu tệp đã tồn tại thì nó sẽ bị xóa đi và thay vào đó là một tệp mới |
“a” | Mở tệp văn bản đã có và ghi thêm dữ liệu tiếp nối vào cuối tệp. Nếu tệp chưa tồn tại thì một tệp mới được tạo ra |
“r+” | Mở tệp văn bản đã có và cho phép cả đọc và ghi |
“w+” | Mở tệp văn bản mới cho phép cả đọc và ghi. Nếu tệp đã tồn tại thì nó sẽ bị xóa đi và thay bằng tệp mới |
“a+” | Mở tệp văn bản đã có hoặc tạo tệp mới để đọc và ghi thêm dữ liệu tiếp nối vào tệp. |
Có thể bạn quan tâm!
- Cơ sở lập trình - Trường ĐH Thương mại - 10
- Cơ sở lập trình - Trường ĐH Thương mại - 11
- Cơ sở lập trình - Trường ĐH Thương mại - 12
- Cơ sở lập trình - Trường ĐH Thương mại - 14
Xem toàn bộ 113 trang tài liệu này.
Cơ sở lập trình194
Ý nghĩa | |
“rb” | Mở tệp nhị phân đã tồn tại để đọc |
“wb” | Mở tệp nhị phân mới để ghi. Nếu tệp đã tồn tại thì nó sẽ bị xóa đi và thay vào đó là một tệp mới |
“ab” | Mở tệp nhị phân đã có và ghi thêm dữ liệu tiếp nối vào cuối tệp. Nếu tệp chưa tồn tại thì một tệp mới được tạo ra |
“r+b” | Mở tệp nhị phân đã có và cho phép cả đọc và ghi |
“w+b” | Mở tệp nhị phân mới cho phép cả đọc và ghi. Nếu tệp đã tồn tại thì nó sẽ bị xóa đi và thay bằng tệp mới |
“a+b” | Mở tệp nhị phân đã có hoặc tạo tệp mới để đọc và ghi thêm dữ liệu tiếp nối vào tệp. |
Cơ sở lập trình 195
Hàm đọc/ghi số nguyên
Hàm đọc/ghi ký tự
Hàm đọc/ghi khối dữ liệu (số thực/struct)
07/2020 Cơ sở lập trình 196
Hàm putw
Dạng hàm: int putw(int n, FILE *f)
Trong đó:
▪ n là một giá trị nguyên
▪ f là con trỏ tệp
Công dụng: ghi một giá trị nguyên n vào tệp f dưới dạng 2 bytes. Nếu thành công thì hàm trả lại giá trị là số nguyên được ghi vào tệp, ngược lại hàm trả lại giá trị là EOF.
07/2020 Cơ sở lập trình 197
Hàm getw
Dạng hàm: int getw( FILE *f) Trong đó:
▪ f là con trỏ tệp
Công dụng: đọc một số nguyên 2 bytes từ tệp f. Nếu thành công thì hàm trả lại giá trị là số nguyên đọc được từ tệp. Nếu gặp lỗi hoặc gặp kết thúc tệp hàm trả lại giá trị là EOF.
07/2020 Cơ sở lập trình 198
Ví dụ: viết chương trình thực hiện việc ghi một dãy số nguyên vào tệp sau đó đọc các số nguyên này từ tệp và in ra màn hình.
07/2020 Cơ sở lập trình 199
#include <stdio.h>
#include <conio.h>
void main()
{
FILE *f;
int i;
/*ghi các số nguyên vào tệp*/ f= fopen(“BT.txt”,”wb”); for (i=1;i<100;i++) putw(i,f);
fclose(f);
/* Đọc các số nguyên từ tệp*/
f=fopen(“BT.txt”,”rb”);
while ((i = getw(f))!=EOF)
printf(“%d”,i);
fclose(f);
getch();
}
//quy tắc đọc tệp trong C:
Phải đọc phần tử của tệp trước rồi mới thử xem phần tử đó có phải là EOF hay không.
07/2020 Cơ sở lập trình 200
Hàm fputc
Dạng hàm
int fputc(int ch, FILE *f) Trong đó:
ch: là một giá trị nguyên
f: là con trỏ tệp
Công dụng: hàm này có chức năng ghi vào tệp f một ký tự có mã là m = ch % 256. Nếu thành công thì hàm trả lại giá trị là mã của ký tự được ghi. Ngược lại hàm sẽ trả lại giá trị là EOF.
Lưu ý: Ghi cách khác bằng sử dụng macro
int putc(int ch, FILE *f)
07/2020 Cơ sở lập trình 201
Hàm fgetc
Dạng hàm
int fgetc(FILE *f)
Trong đó:
▪ f :là con trỏ tệp
Công dụng: đọc một ký tự từ tệp f. Nếu thành công hàm trả lại giá trị là mã của ký tự đọc được. Nếu có lỗi hoặc gặp kết thúc tệp thì hàm sẽ trả lại giá trị là EOF
Lưu ý: Cách đọc khác bằng sử dụng macro int getc(FILE *f)
07/2020 Cơ sở lập trình 202
Ví dụ: Chương trình sau thực hiện công việc sao chép dữ liệu từ tệp f1 sang tệp f2
07/2020 Cơ sở lập trình 203
#include <stdio.h> | } | if (f1== NULL) { printf(“n Tep khong ton tai”); getch(); exit(1); } f2=fopen(t2,”wb”); while ((c=fgetc(f1))!=EOF) fputc(c,f2); fclose(f1); fclose(f2); 204 |
#include <conio.h> | ||
void main() | ||
{ | ||
char t1[14], t2[14]; | ||
FILE *f1,*f2; | ||
int c; | ||
printf(“n Nhap ten tep nguon”); | ||
gets(t1); | ||
printf(“n Nhap ten tep dich”); | ||
gets(t2); | ||
f1= fopen(t1,”rb”); | ||
07/2020 Cơ sở lập trình |
Dạng hàm: int fwrite(void *p, int size, int n, FILE *f)
Trong đó:
p: là con trỏ trỏ tới vùng nhớ chứa dữ liệu cần ghi
size: là kích thước của khối dữ liệu
n: là số khối dữ liệu cần ghi
f: là con trỏ tệp.
Công dụng: ghi n khối dữ liệu kích thước size byte từ vùng nhớ p vào tệp f. Hàm trả lại giá trị bằng số khối dữ liệu thực sự ghi được vào tệp
Lưu ý:
Hàm cho phép ghi nhiều khối dữ liệu với yêu cầu các khối dữ liệu này phải cùng kích thước. size là tổng kích thước của n khối dữ liệu và được tính bằng hàm sizeof().
07/2020 Cơ sở lập trình 205
Dạng hàm: int fread(void *p, int size, int n, FILE *f) Trong đó:
p: là con trỏ trỏ tới vùng nhớ chứa dữ liệu đọc được
size: là kích thước của khối dữ liệu theo byte
n: là số khối dữ liệu cần đọc
f: là con trỏ tệp.
Công dụng: đọc n khối dữ liệu kích thước size byte từ tệp f đưa vào vùng nhớ p. Hàm trả về giá trị là số khối dữ liệu thực sự đọc được.
Lưu ý
Giá trị trả về của hàm có thể nhỏ hơn số khối dữ liệu được yêu cầu (cuối tệp hoặc khi có một lỗi nào đó)
07/2020 Cơ sở lập trình 206
Ví dụ:
1. Viết chương trình sử dụng hàm fread và fwrite để đọc/ghi dãy số nguyên lớn(long - 4B)/số thực.
2. Viết chương trình minh họa cách dùng các hàm fwrite và fread để đọc/ ghi một tệp chứa danh sách gồm n sinh viên bao gồm các thông tin hten, que, dtoan, dly,dhoa. (chương trình)
07/2020 Cơ sở lập trình 207
Hàm đọc/ghi theo khuôn dạng
Hàm đọc/ghi ký tự
Hàm đọc/ghi xâu ký tự
07/2020 Cơ sở lập trình 208