Tổng quan những kiến thức cần lưu ý về hàm C fopen

Có thể nói xử lý tệp là một phần thiết yếu của mọi ngôn ngữ lập trình. Đối với hầu hết các ứng dụng thì tệp được sử dụng để lưu trữ dữ liệu hoặc thông tin thường là đầu vào. Đầu ra và những thông tin bảng cơ sở dữ liệu hoặc dữ liệu quan trọng được yêu cầu để hoàn thành quá trình ứng dụng. Do đó mà việc học xử lý tệp là vô cùng quan trọng và cần thiết.

Đặc biệt trong tệp, dữ liệu sẽ được lưu dưới dạng một chuỗi byte. Quá trình đọc nội dung của tệp trong một ứng dụng phần mềm và được ghi vào tệp được gọi là ‘I / O tệp’ (File Input and Output). Ngoài ra, các ngôn ngữ lập trình C cũng cung cấp nhiều hàm thư viện chuẩn cho tệp I / O trong một tiêu đề thư viện chuẩn C được gọi là ‘stdio.h’. Một vài hàm File I / O quan trọng như là “fopen”, “fclose”, “fread”, “fwrite”, “fgets”, “fputs”, “fscanf” và “fprintf” được dùng để bắt đầu bất kỳ thao tác nhập hay xuất tệp nào. Vậy cụ thể C fopen là gì cùng Box.edu tìm hiểu nhé!

Xem thêm: Chương trình C để chuyển đổi số thập phân sang định dạng nhị phân

Xem thêm: Định dạng chuỗi C string format hướng dẫn cho người mới

Xem thêm: Tổng quan những kiến thức cần biết về kiểu dữ liệu C

Mục lục bài viết

Tìm hiểu C fopen là gì?

tim-hieu-c-fopen-la-gi.jpg

Tìm hiểu C fopen là gì?

Phương thức C fopen được hiểu là một trình bao bọc cấp cao. Cho lệnh gọi hệ thống ‘mở’ trong hệ điều hành Unix. Đồng thời nó được sử dụng để tạo tệp hoặc thực hiện các thao tác I / O trên tệp hiện có dựa trên chế độ được chỉ định.

Định dạng phương pháp C fopen 

FILE * fopen (const char * tên tệp, const char * openmode);

Đối với định dạng trên, đối số ‘tên tệp’ là một con trỏ đến một chuỗi ký tự có tên tệp sẽ được mở. Còn đối số ‘openmode’ được hiểu là một con trỏ đến một chuỗi ký tự chỉ định kiểu truy cập (chế độ) mà chương trình yêu cầu. Chế độ này cung cấp để hạn chế việc sử dụng tệp của một ứng dụng. Ngoài ra C ‘fopen’ sẽ trả về một con trỏ FILE được chương trình sử dụng để theo dõi các tệp đã mở.

Các chế độ được sử dụng trong phương pháp C fopen

Các mode dùng để mở file trong C

  • Chế độ ‘r’ được dùng để mở tệp phục vụ cho việc đọc khi tệp đã tồn tại, nếu không sẽ tạo ra lỗi không mở được tệp
  • Chế độ ‘w’ có tác dụng tạo một tệp mới để ghi và hủy nội dung của tệp khi đã tồn tại
  • Chế độ ‘a’ tạo một tệp mới để ghi và ghi dữ liệu vào cuối tệp mà không cắt bớt dữ liệu tệp hiện có
  • Còn chế độ ‘r +’ và ‘w +’ là phiên bản mở rộng của ‘r’ và ‘w’ tương đương với việc bổ sung quyền truy cập đọc và ghi
  • Chế độ ‘a +’ là phiên bản mở rộng của ‘a’ và tạo một tệp mới để truy cập đọc hoặc ghi. Việc đọc bắt đầu từ phần mở đầu của tệp, đồng thời việc ghi sẽ được thực hiện ở phần cuối của dữ liệu hiện có

Hàm trả về:

  • Nếu thành công, thì hàm fopen() sẽ trả về một con trỏ đến đối tượng FILE điều khiển luồng tệp đã mở
  • Con trong trường hợp thất bại, nó trả về một con trỏ null

Mở file binary file trong C

Đặc biệt bằng cách thêm ký tự b vào đằng trước tên mode. Thì chúng ta cũng có thể mở các binary file – tập tin nhị phân trong C. Khác với những tập tin văn bản mà chúng ta có thể đọc được các chữ cái. Văn bản ghi trong đó, thì Binary File là một tập tin chứa nội dung là các chuỗi nhị phân. Các mode dùng để mở binary file trong C cụ thể là:

Mode Xử lý Chức năng
rb Đọc Chế độ đọc của file binary
wb Ghi đè Chế độ ghi đè ở file binary
ab Ghi chèn Chế độ ghi chèn file binary

Hiện nay có một vài ký tự bổ sung có thể được chỉ định tùy ý. Với các chế độ trên để đạt được các kiểu truy cập khác nhau. Ví dụ: ‘b’ dùng để mở một tệp văn bản ở chế độ nhị phân (gọi là truy cập ngẫu nhiên). Nhưng tính năng này chỉ có sẵn trong hệ điều hành dựa trên Windows. Đồng thời ký tự ‘x’ có thể được chỉ định với chế độ ‘w’. Để tránh bị cắt bớt dữ liệu nếu tệp đã được tồn tại.

Dấu ‘+’ trong chế độ truy cập ‘fopen’ yêu cầu một luồng có thể thực hiện cả 2 việc đọc và ghi. Chính vì vậy, loại luồng này sẽ yêu cầu chức năng định vị tệp như ‘fseek’. Khi chuyển từ thể đọc sang ghi hoặc ngược lại. Nếu không, dữ liệu đọc và ghi có thể được xen kẽ với nhau với bất kỳ thứ tự nào do các bộ đệm bên trong không được làm trống đúng cách trong quá trình chuyển đổi giữa đọc và ghi. Nhưng khi một tệp được mở bằng chế độ nối thêm, thì các thao tác ghi chỉ có thể được thực hiện ở phần cuối của các tệp này ngay cả khi con trỏ tệp trỏ vào giữa tệp (theo tiêu chuẩn chung của Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) dành cho C).

Các phương pháp hoạt động của C fopen

cac-phuong-phap-hoat-dong-cua-c-fopen.jpg

Các phương pháp hoạt động của C fopen

Trước khi bắt đầu triển khai hàm fopen, thì bạn phải ghi nhớ những điểm quan trọng dưới đây để tránh mắc những lỗi khi bạn gọi phương thức:

  • Khi một tệp được đặt tên trong ‘fopen’ có chế độ truy cập là ‘w’ hoặc ‘a’, thì tệp này và thư mục mẹ của nó phải có các quyền thích hợp như quyền ghi phải được gán cho nó
  • Lệnh gọi ‘fopen’ mới sẽ không được vượt quá tổng số tệp được phép mở trong một chương trình
  • Đồng thời những tệp được đặt tên không được có kích thước lớn hơn 2GB (giới hạn ‘fopen’)
  • Vì C fopen hỗ trợ các tệp lớn cho nên hãy đảm bảo rằng sẽ có đủ dung lượng để lưu trữ

Tệp FILE *;

int characterValue;

file = fopen (“TestFile.txt”, “r”);

if (tệp == NULL) {

printf (“Lỗi”);

}

khác {

characterValue = fgetc (tệp);

while (characterValue! = EOF) {

printf (“% c”, characterValue);

characterValue = fgetc (tệp);

}

}

fclose (tập tin);

Trong đoạn mã trên, phương thức C ‘fopen’ mở một tệp có tên ‘TestFile.txt’ với chế độ là ‘r’, có nghĩa là chỉ đọc. Khi tệp tồn tại, ‘fopen’ sẽ trả về cho con trỏ FILE khi thành công, nếu không thì trả về ‘NULL’ và ‘Lỗi’ được in trên bảng điều khiển. Khi những phương thức này thành công với việc mở tệp, thì ‘else’ sẽ thực thi và in ra tất cả các ký tự của tệp trên bảng điều khiển cho đến khi một con trỏ tìm kiếm đến cuối tệp (EOF). Trong đoạn mã này thì phương thức ‘fgetc’ trả về một ký tự duy nhất của tệp và tìm kiếm một con trỏ đọc đến ký tự tiếp theo. ‘EOF’ là một hằng số có giá trị là ‘-1’ và được hiển thị ở phần cuối của tệp trong khi đọc. Cuối cùng, phương thức ‘fclose’ sẽ giải phóng một tài nguyên (con trỏ FILE) do một chương trình nắm giữ trong quá trình thực thi.

Biến thể ‘fopen64’

FILE * fopen64 (const char * tên tệp, const char * openmode);

C ‘fopen64’ là một biến thể 64 bit của ‘fopen’ giúp cho việc mở một tệp. Lớn hơn 2GB (giới hạn fopen) trên máy 32 bit. Đồng thời có khả năng thay thế cho phương pháp này. Là ‘fopen’ nhưng các nguồn được biên dịch bằng cờ _FILE_OFFSET_BITS == 64.

Biến thể được sửa đổi C fopen ‘freopen’

FILE * freopen (const char * tên tệp, const char * openmode, FILE * stream)

Không giống như C ‘fopen’, thì ‘freopen’ có đối số thứ ba. Thuộc loại dòng FILE đã được mở trong một chương trình. Nó đóng luồng đang mở, mở lại và liên kết với tệp. Điều này cũng tương tự như sự kết hợp của ‘fclose’ và ‘fopen’. ‘Freopen64’ là một biến thể 64 bit. Của ‘freopen’ giống như ‘fopen64’ của ‘fopen’. Phương thức ‘freopen’ chủ yếu được sử dụng khi một dòng mở của đầu vào chuẩn (stdin). Đầu ra (stdout) và lỗi (stderr) phải được đính kèm với một tệp riêng biệt. Dưới đây là một đoạn mã minh họa việc tạo tệp nhật ký cho đầu ra (stdout):

FILE * fileHandler;

fileHandler = freopen (“output.txt”, “w +”, stdout);

fprintf (stdout, ”Văn bản này được chuyển hướng đến output.txt \ n”);

fclose (fileHandler);

Tổng kết

Hy vọng rằng những thông tin chia sẻ trên từ Box.edu. Sẽ giúp các bạn có thêm những kiến thức. Về một trong những yếu tố của C fopen đó là tệp. Từ đó có thể hiểu sâu hơn về ngôn ngữ lập trình C này. Chúc các bạn thành công hơn nữa trong quá trình chinh phục lĩnh vực lập trình C.

5/5 - (5 bình chọn)
Xin chào các bạn! Mình là Hà Nguyên Phương Hiện đang là tác giả của Box.edu.vn website nổi tiếng chuyên review, đánh giá, giới thiệu các khóa học hay nhất hiện nay.