Hướng dẫn thao tác với file trong C

Có rất là nhiều hàm phục vụ cho công việc đọc ghi file trong C. Trong bài hướng dẫn này, Lập trình không khó sẽ hướng dẫn bạn phương pháp để làm việc với file sử dụng ngôn từ lập trình C. Một số hàm đọc ghi file trong C có thể nói đến như là: fprintf(), fscanf(), fread(), fwrite(), fseek … & một số hàm khác nữa.

doc-ghi-file-trong-c

Nếu bạn đang tìm kiếm đọc ghi file trong C++, thì hãy đọc nội dung này nhé.

Vì sao tất cả chúng ta cần đến file?

  • Dữ liệu được lưu ở biến của chương trình, & nó sẽ bặt tăm khi chương trình chấm dứt. Sử dụng file để lưu trữ dữ liệu thiết yếu để bảo đảm dữ liệu của các bạn không bị mất ngay cả khi chương trình của các bạn ngừng chạy.
  • Nếu chương trình của các bạn có đầu vào(input) là lớn, bạn sẽ rất vất vả nếu phải nhập mỗi khi chạy. Thay vào đó, hãy lưu vào file & chương trình của các bạn sẽ tự đọc mỗi lần khởi chạy
  • Đơn giản copy, di chuyển dữ liệu giữa các thiết bị với nhau

Các kiểu file

Trước khi bạn làm việc với file, chúng ta nên biết về 2 kiểu file khác nhau sau đây:

  1. File văn bản – text files
  2. File nhị phân – binary file

1. File văn bản – text files

File văn bản là file thường có đuôi là .txt. Những file này bạn có thể đơn giản tạo nên bằng cách sử dụng các text editer phổ biến như Notepad, Notepad++, Sublime Text,…

Khi bạn mở các file này bằng các text editer nói trên, bạn sẽ thấy được văn bản ngay & có thể đơn giản thao tác sửa, xóa, thêm bài viết của file này.

Kiểu file này thuận lợi cho tất cả chúng ta trong việc sử dụng mỗi ngày, nhưng nó sẽ kém bảo mật & cần nhiều bộ nhớ lưu trữ để lưu trữ hơn.

2. File nhị phân – Binary files

File nhị phân thường có đuôi mở rộng là .bin

Thay vì lưu trữ dưới dạng chữ thuần thúy, các file này được lưu dưới dạng nhị phân, chỉ bao gồm các số 0 & 1. Bạn cũng sẽ thấy các con số này nếu cố mở nó bằng 1 text editer kể trên.

Loại file này giúp lưu trữ được dữ liệu với kích cỡ to hơn, chẳng thể đọc bằng các text editer thông thường & thông tin lưu trữ ở loại file được bảo mật hơn so với file văn bản.

Các thao tác với file

Trong ngôn từ lập trình C, có một số thao tác chính khi làm việc với file, bao gồm cả file văn bản & file nhị phân:

  1. Tạo mới một file
  2. Mở một file đã có
  3. Đóng file đang mở
  4. Đọc thông tin từ file/ Ghi thông tin ra file

Thao tác với file trên ngôn từ C

Khi làm việc với file, bạn cần khai báo 1 con trỏ kiểu FILE. Việc khai báo đó là thiết yếu để có sự connect giữa chương trình của các bạn & tập tin mà bạn cần thao tác.

1

2

 

FILE *

fptr

;

 

Thao tác mở file

Để đọc ghi file trong C cũng như trong mọi ngôn từ lập trình, việc trước hết bạn cần làm là mở file mà bạn mong muốn làm việc. Trong ngôn từ lập trình C, tất cả chúng ta có thể mở file bằng cách dùng hàm fopen() trong thư viện stdio.н như sau:

1

2

 

fptr

=

fopen

(

“fileopen”

,

“mode”

)

 

Trong số đó mode là một tham số tất cả chúng ta cần chỉ định.

Chẳng hạn:

1

2

3

4

5

6

 

fptr

=

fopen

(

“E:cprogramnewprogram.txt”

,

“w”

)

;

 

// hoặc

 

fptr

=

fopen

(

“E:cprogramoldprogram.bin”

,

“rb”

)

;

 

  • Giả sử tập tin newprogram.txt chưa có trong thư mục E:cprogram. Chẳng hạn trước hết với mode = "w" sẽ cho phép chương trình auto tạo nên file newprogram.txt nếu nó chưa có. & sau đó mở file này lên nhưng chương trình chỉ có thể ghi dữ liệu vào mà chẳng thể đọc.
  • Mode là w chỉ cho phép chương trình ghi(nếu đã có dữ liệu thì ghi đè) bài viết của file.
  • Với chẳng hạn thứ 2, mode là rb cho phép chương trình mở 1 file nhị phân đã có sẵn oldprogram.bin. Với trường hợp này, chương trình của các bạn chỉ có thể đọc file & chẳng thể ghi bài viết vào file.

Các tham số của “mode”

Dưới đây là các giá trị có thể có của tham số mode  nói trên:

Mode
Ý nghĩa
Nếu file không tồn tại

r
Mở file chỉ cho phép đọc
Nếu file không tồn tại, fopen() trả về NULL.

rb
Mở file chỉ cho phép đọc dưới dạng nhị phân.
Nếu file không tồn tại, fopen() trả về NULL.

w
Mở file chỉ cho phép ghi.
Nếu file đã tồn tại, bài viết sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo auto.

wb
Open for writing in binary mode.
Nếu file đã tồn tại, bài viết sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo auto.

α
Mở file ở cơ chế ghi “append”. Tức là sẽ ghi vào cuối của bài viết đã có.
Nếu file không tồn tại, nó sẽ được tạo auto.

ab
Mở file ở cơ chế ghi nhị phân “append”. Tức là sẽ ghi vào cuối của bài viết đã có.
Nếu file không tồn tại, nó sẽ được tạo auto.

r+
Mở file cho phép cả đọc & ghi.
Nếu file không tồn tại, fopen() trả về NULL.

rb+
Mở file cho phép cả đọc & ghi ở dạng nhị phân.
Nếu file không tồn tại, fopen() trả về NULL.

w+
Mở file cho phép cả đọc & ghi.
Nếu file đã tồn tại, bài viết sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo auto.

wb+
Mở file cho phép cả đọc & ghi ở dạng nhị phân.
Nếu file đã tồn tại, bài viết sẽ bị ghi đè. Nếu file không tồn tại, nó sẽ được tạo auto.

α+
Mở file cho phép đọc & ghi “append”.
Nếu file không tồn tại, nó sẽ được tạo auto.

ab+
Mở file cho phép đọc & ghi “append” ở dạng nhị phân.
Nếu file không tồn tại, nó sẽ được tạo auto.

Thao tác đóng file

Khi làm việc với tập tin hoàn tất, kể cả là file nhị phân hay file văn bản. Bạn cần đóng file sau khoảng thời gian làm việc với nó xong.

Việc đóng file đang mở có thể được thực hiện bằng cách sử dụng hàm fclose().

1

2

 

fclose

(

fptr

)

;

//Con trỏ FILE trỏ tới file cần được đóng.

 

Đọc/Ghi file văn bản trong C

Tất cả chúng ta sẽ học cách đọc ghi file trong C với file văn bản trước. Với file nhị phân, bạn kéo xuống dưới để xem tiếp.

Để làm việc với file văn bản, tất cả chúng ta sẽ sử dụng fprintf() & fscanf().

VD1. Ghi file sử dụng fprintf()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

 

#include <stdio.hvàgt;

#include <stdlib.hvàgt;

 

int

main

(

)

{

  

int

num

;

  

FILE *

fptr

;

  

fptr

=

fopen

(

“C:program.txt”

,

“w”

)

;

 

  

if

(

fptr

==

NULL

)

  

{

      

printf

(

“Error!”

)

;

  

      

exit

(

1

)

;

            

  

}

 

  

printf

(

“Enter num: “

)

;

  

scanf

(

“%d”

,

&num);

 

  

fprintf

(

fptr

,

“%d”

,

num

)

;

  

fclose

(

fptr

)

;

 

  

return

;

}

 

Chương trình nhận số num từ keyboard & ghi vào file văn bản program.txt.

Sau khoảng thời gian bạn chạy chương trình này, bạn sẽ thấy file văn bản program.txt được tạo mới trong ổ C thuộc máy tính bạn. Khi mở file này lên, bạn sẽ thấy số mà bạn vừa nhập cho biến num kia.

VD2. Đọc file sử dụng fscanf()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

 

#include <stdio.hvàgt;

#include <stdlib.hvàgt;

 

int

main

(

)

{

  

int

num

;

  

FILE *

fptr

;

 

  

if

(

(

fptr

=

fopen

(

“C:program.txt”

,

“r”

)

)

==

NULL

)

{

      

printf

(

“Error! opening file”

)

;

 

      

// Program exits if the file pointer returns NULL.

      

exit

(

1

)

;

  

}

 

  

fscanf

(

fptr

,

“%d”

,

&num);

 

  

printf

(

“Value of n=%d”

,

num

)

;

  

fclose

(

fptr

)

;

  

  

return

;

}

 

Chương trình này sẽ đọc giá trị số được lưu trong file program.txt mà chương trình ở VD1 vừa tạo nên & in lên màn hình.

Đọc/Ghi file nhị phân trong C

Các hàm fread() & fwrite() trong C được sử dụng để đọc & ghi file trong C ở dạng nhị phân.

Ghi file nhị phân

Để ghi file nhị phân, bạn cần sử dụng hàm fwrite(). Hàm này cần 4 tham số: địa chỉ của biến lưu dữ liệu cần ghi, kích cỡ của biến lưu dữ liệu đó, số lượng kiểu dữ liệu của biến đó & con trỏ FILE trỏ tới file bạn mong muốn ghi.

1

2

 

fwrite

(

address_data

,

size_data

,

numbers_data

,

pointer_to_file

)

;

 

VD3. Ghi file nhị phân sử dụng fwrite()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

 

#include <stdio.hvàgt;

#include <stdlib.hvàgt;

 

struct

threeNum

{

  

int

n1

,

n2

,

n3

;

}

;

 

int

main

(

)

{

  

int

и

;

  

struct

threeNum

num

;

  

FILE *

fptr

;

 

  

if

(

(

fptr

=

fopen

(

“C:program.bin”

,

“wb”

)

)

==

NULL

)

{

      

printf

(

“Error! opening file”

)

;

 

      

// Program exits if the file pointer returns NULL.

      

exit

(

1

)

;

  

}

 

  

for

(

и

=

1

;

и

<

5

;

++

и

)

  

{

      

num

.

n1

=

и

;

      

num

.

n2

=

5

*

и

;

      

num

.

n3

=

5

*

и

+

1

;

      

fwrite

(

&num, sizeof(struct threeNum), 1, fptr);

  

}

  

fclose

(

fptr

)

;

  

  

return

;

}

 

Trong VD3 này, chương trình sẽ tạo nên một file program.bin trên ổ đĩa C của các bạn. Chương trình này đã khai báo 1 kiểu dữ liệu cấu tạo lưu 3 giá trị số n1, n2, n3; & nó được sử dụng trong hàm main có tên biến là num.

Trong vòng lặp, các số được ghi vào file sử dụng hàm fwrite(). Các tham số gồm:

  • Tham số trước hết là địa chỉ của biến num
  • Tham số thứ 2 là kích cỡ của biến num
  • Tham số thứ 3 là số lượng kiểu dữ liệu – ở giai đoạn này là 1.
  • Tham số thứ 4 là con trỏ FILE trỏ tới tệp tin program.bin

Cuối cùng, tất cả chúng ta đóng file sử dụng fclose().

Đọc file nhị phân

Hàm fread() cũng có 4 tham số cũng giống như hàm fwrite() phía trên.

1

2

 

fread

(

address_data

,

size_data

,

numbers_data

,

pointer_to_file

)

;

 

Chẳng hạn đọc file nhị phân sử dụng fread()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

 

#include <stdio.hvàgt;

#include <stdlib.hvàgt;

 

struct

threeNum

{

  

int

n1

,

n2

,

n3

;

}

;

 

int

main

(

)

{

  

int

и

;

  

struct

threeNum

num

;

  

FILE *

fptr

;

 

  

if

(

(

fptr

=

fopen

(

“C:program.bin”

,

“rb”

)

)

==

NULL

)

{

      

printf

(

“Error! opening file”

)

;

 

      

// Program exits if the file pointer returns NULL.

      

exit

(

1

)

;

  

}

 

  

for

(

и

=

1

;

и

<

5

;

++

и

)

  

{

      

fread

(

&num, sizeof(struct threeNum), 1, fptr);

      

printf

(

“n1: %dtn2: %dtn3: %d”

,

num

.

n1

,

num

.

n2

,

num

.

n3

)

;

  

}

  

fclose

(

fptr

)

;

  

  

return

;

}

 

Trong chẳng hạn này, độc giả file program.bin & lặp qua từng dòng. Bạn sẽ thu được các giá trị tương ứng khi bạn ghi vào trong VD3.

Một số chẳng hạn về đọc ghi file trong C

Trong phần này, mình sẽ trình bày 2 chẳng hạn về đọc ghi file trong C, bao gồm các bài tập đọc ghi file sau:

  • Ghi văn bản vào file trong C
  • Đọc dữ liệu văn bản từ file trong C

Ghi vào file một câu văn bản

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

 

#include <stdio.hvàgt;

#include <stdlib.hvàgt;  /* For exit() function */

int

main

(

)

{

  

char

sentence

[

1000

]

;

  

FILE *

fptr

;

 

  

fptr

=

fopen

(

“program.txt”

,

“w”

)

;

  

if

(

fptr

==

NULL

)

  

{

      

printf

(

“Error!”

)

;

      

exit

(

1

)

;

  

}

  

  

printf

(

“Enter a sentence:n”

)

;

  

gets

(

sentence

)

;

 

  

fprintf

(

fptr

,

“%s”

,

sentence

)

;

  

fclose

(

fptr

)

;

 

  

return

;

}

 

Chạy thử:

1

2

3

 

Enter sentence:

Ι am awesome and so are files.

 

Đọc dữ liệu văn bản từ file

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

 

#include <stdio.hvàgt;

#include <stdlib.hvàgt; // For exit() function

int

main

(

)

{

    

char

ͼ

[

1000

]

;

    

FILE *

fptr

;

 

    

if

(

(

fptr

=

fopen

(

“program.txt”

,

“r”

)

)

==

NULL

)

    

{

        

printf

(

“Error! opening file”

)

;

        

// Program exits if file pointer returns NULL.

        

exit

(

1

)

;

        

    

}

 

    

// reads text until newline

    

fscanf

(

fptr

,

“%[^n]”

,

ͼ

)

;

 

    

printf

(

“Data from the file:n%s”

,

ͼ

)

;

    

fclose

(

fptr

)

;

    

    

return

;

}

 

Giả sử file văn bản program.txt có bài viết như sau:

1

2

3

4

 

C programming is awesome.

Ι love C programming.

How are you doing?

 

Chạy thử:

1

2

 

Data

from

the

file

:

C

programming

is

awesome

.

 

Xem qua

Xem thêm bài viết thuộc chuyên mục: Kiến thức lập trình
XEM THÊM  Cài đặt, Lập trình Java trên VS Code Qua Ví dụ

Related Articles

Stay Connected

FansLike
3,051FollowersFollow
SubscribersSubscribe

Latest Articles

XEM THÊM  Cài đặt, Lập trình Java trên VS Code Qua Ví dụ