Tổng quan File trong C

toi1em

Member
Feb 20, 2012
949
0
16
40
FILE* <tên biến file>;
  • Kiểu dữ liệu của file là kiểu FILE*
  • <tên biến file>: cách đặt tên biến file theo yêu cầu đặt tên của ngôn ngữ C

VD:


FILE * f1; //khai báo một biến file FILE * f2, * f3;//Khai báo nhiều biến file



FILE * f1; //khai báo một biến file

FILE * f2, * f3;//Khai báo nhiều biến file
  1. Gán biến file (đã khai báo) với một file vật lý

<tên biến file>=fopen(<duong dan file>, <cách mở file>);

  • fopen la hàm mở file
  • <duong dan file>: là chuỗi chứa đường dẫn tới file bạn muốn mở. VD: bạn muốn mở file txt trong ổ đĩa thư mục LapTrinhC của ổ đĩa E thì <duong dan file> chính là “E:\\LapTrinhC\\dulieu.txt”. Lưu ý ta phải dùng \\ thay vì \ trong chuỗi <duong dan file>
  • <cách mở file> : là một chuỗi qui định mục đích cho việc sử dụng file có thể sử dụng một trong các giá trị sau:
    • “w”: mở file để ghi, nếu file muốn mở chưa có thì chương trình sẽ tự động tạo ra file đó. Nếu file muốn mở đã có sẵn thì file sẽ được mở, tuy nhiên dữ liệu trong file nếu có sẽ bị xóa hết trở thành file trống
    • “r”: mở file để đọc, nếu file chưa có thì chương trình sẽ báo lỗi. Nếu file đã tồn tại thì chương trình sẽ mở file. Dữ liệu trong file sẽ không thay đổi.
    • “a”: mở file để ghi thêm, cách hoạt động giống “w”, tuy nhiên nếu file đã có dữ liệu thì chương trình sẽ không xóa dữ liệu có trước mà sẽ ghi tiếp vào phía sau
    • “r+”, “w+”: mở file, cho phép đọc và ghi file.

VD: ta muốn gán biến f1 cho file ở đường dẫn “E:\LapTrinhC\dlmatran.txt” để có đọc thong tin từ file này ta dùng câu lệnh:

f1=fopen(“E:\\LapTrinhC\\dlMatran.txt”,”r”);

VD: ta muốn gán biến f2 cho file “D:\ketqua.txt” để ghi kết quả thực hiện công việc ta dùng câu lệnh:

f2=fopen(“D:\\ketqua.txt”, “w”);

  1. Xử lý file

Thao tác cơ bản khi làm việc với file trong ngôn ngữ C là đọc và ghi file. Cú pháp đọc và ghi file trong C tương tự với cú pháp đọc và ghi dữ liệu từ màn hình

STTCâu lện trên màn hìnhCâu lệnh với file
1printf(“… dịnh dạng…”,<biến>);fprintf(<biến file>,(“… dịnh dạng…”,<biến>)
2scanf(“định dang”,&<biến>);fscanf(<biến file>, “định dang”,&<biến>);
3gets(<tenchuoi>);fgets(<tenchuoi>, <kích thuoc>,<biến file>);

Nhận xét:

  • Hàm xử lý trên file sẽ có thêm ký tự f so với hàm xử lý trên bàn phím và màn hình: ví dụ từ printf => fprintf, scanf => fscanf, gets => fgets
  • Các tham số trong câu lệnh xử lý trên file sẽ nhiều tham số hơn câu lệnh xử lý trên bàn phím và màn hình <biến file> để xác định mình đang làm việc với file nào

Ví dụ: Để gán giá trị người dùng từ bàn phím vào biến số nguyên a và xuất giá trị đó ra màn hình ta dùng đoạn lệnh sau


int a; printf("nhap vao mot so nguyen: "); scanf("%d", &a); printf("so ban vua nhap la %d ", a);



int a;

printf("nhap vao mot so nguyen: ");

scanf("%d", &a);

printf("so ban vua nhap la %d ", a);

Và để gán giá trị từ biến file f1 vào biến nguyên a rồi ghi giá trị của a vào biến file f2 ta sử dụng đoạn lệnh:


int a; fscanf(f1,"%d",&a); fprintf(f2,"so ban vua nhap la %d ", a);



int a;

fscanf(f1,"%d",&a);

fprintf(f2,"so ban vua nhap la %d ", a);

Lưu ý: Để kiểm tra đã ta đã đọc dữ liệu đến hết file hay chưa ta dùng một hằng số là EOF (End Of File)

Ví du: Tính tổng dãy số có n phần tử trong file. Giả sử ta có file f được gán cho file dulieu.txt có nội dung nhu sau:

5

2 4 10 4 13

Trong đó dòng 1 là số n. Và dòng sau là n số nguyên liên tiếp.

Phân tích: Trong bài này ta cần đọc được số nguyên n ở đầu file, sau đó ta đọc liên tiếp n số (lặp n lần công việc đọc từ file) và tính tổng của chúng

B1: khai báo biến lưu tổng và gán giá trị bằng 0

B2: đọc giá trị đầu tiên từ file cho biến n

B3: Lặp n lần

Công việc lặp
:

Đọc giá trị số và gán cho biến a

Tính tổng: tong=tong +a;

B4: xuât ra màn hình biến tổng


Đoạn code minh họa:


int n; int a; int tong=0; fscanf(f,"%d",&n); for(int i=0;i<n;i++) { fscanf(f,"%d",&a); tong=tong+a; } printf("tong day so la %d \n", tong);



1

2

3

4

5

6

7

8

9

10


int n;

int a;

int tong=0;

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

for(int i=0;i<n;i++)

{

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

tong=tong+a;

}

printf("tong day so la %d \n", tong);

Ví dụ: Cũng với bài toán đó nếu như file đã cho không cho sẵn số nguyên n mà chỉ cho dãy số.

Phân tích: Bài này ta không có sẵn số lượng phần tử của dãy trước khi đọc dãy. Như vậy ta không biết phải đọc file bao nhiêu lần. Vậy mỗi lần đọc dữ liệu ta cần kiểm tra xem đã kết thúc file hay chưa. Nếu kết thúc thì dừng đọc, còn nếu chưa kết thúc file ta phải đọc tiếp.

B1: khai báo biến lưu tổng và gán giá trị bằng 0

B2: Lặp không xác định cho tới khi đến cuối file

Điều kiện lặp:
Đọc giá trị số và gán cho biến a

Công việc lặp: Tính tổng: tong=tong +a;

B3: xuât ra màn hình biến tổng



int a; int tong=0; while(fscanf(f,"%d",&a)!=EOF)// { tong=tong+a; } printf("tong day so la %d \n", tong);



1

2

3

4

5

6

7


int a;

int tong=0;

while(fscanf(f,"%d",&a)!=EOF)//

{

tong=tong+a;

}

printf("tong day so la %d \n", tong);
  1. Đóng file

Sau khi thao tác với file xong. Một điều quan trọng là cần đóng file đã mở kết thúc quá trình làm việc với file. Ta sử dụng cú pháp

fclose(<tên biến file>);

VD: sau khi đọc dữ liệu xong ta muốn đóng file f1 ta dùng câu lệnh:

fclose(f1);

Sưu tầm & Tổng hợp
w: www.hanoiyeu.com
e: [email protected]