Xử lý File với C++

  1. Phân loại

      Tập tin là hình thức lưu trữ phổ biến trên bộ nhớ phụ, gồm 2 loại:

    • Tập tin văn bản: là tập tin chỉ lưu trữ thuần túy văn bản, trong đó các kí tự được biểu diễn bằng mã ASCII của nó, người dùng có thể đọc được.

Tính chất:

      • Dễ truy xuất và xử lí
      • Độ bảo mật kém
      • Tốc độ truy xuất kém
      • Kích thước lớn.

            - Vd: Lưu số nguyên 12345 ở dạng binary (2 byte) và dạng chuỗi (5 byte).

Các dạng thường gặp:

      • Tập tin cấu hình: *.INI,  *.CFG
      • *.TXT, *.HTML, *.XML

 

    • Tập tin nhị phân: là tập tin chứa dữ liệu mà có ít nhất một vài chuỗi bit không thể biểu diễn ở dạng văn bản trơn, do đó tập tin này chỉ có máy đọc được còn người dùng không đọc được.

Tính chất:

      • Truy xuất và xử lí phức tạp hơn
      • Tốc độ truy xuất nhanh
      • Tính bảo mật cao hơn

Các dạng thường gặp:

      • Các tập tin có cấu trúc tự định nghĩa
      • *.DOC, *XLS, *PDF, *PPT
      • *.JPG, *.PCX, *.BMP,*.TIF
      • *.MP3, *.WAV, *.AVI,…

 

  1. Một số hàm xử lí chung cho cả hai dạng tập tin (xem MSDN)

Tên hàm

Chức năng

fopen

Mở tập tin theo kiểu văn bản hoặc nhị phân

fclose

Đóng tập tin

fcloseall

Đóng tất cả các tập tin

fflush

Làm sạch vùng đệm của một tập tin đang mở

fflushall

Làm sạch vùng đệm của tất cả các tập tin đang mở

remove/unlink

Xóa tập tin

 

  1. Một số hàm xử lí dùng cho tập tin văn bản (xem MSDN)

Tên hàm

Chức năng

fopen

Mở tập tin theo kiểu văn bản hoặc nhị phân

fclose

Đóng tập tin

fcloseall

Đóng tất cả các tập tin

fprintf

Ghi giá trị dạng text lên tập tin

fscanf

Đọc giá trị dạng text từ tập tin

fflush

Làm sạch vùng đệm của một tập tin đang mở

fflushall

Làm sạch vùng đệm của tất cả các tập tin đang mở

remove/unlink

Xóa tập tin

putc/fputc

Ghi lên tập tin một kí tự (sử dụng trong tập tin văn bản hoặc nhị phân có khác biệt)

getc/fgetc

Đọc từ tập tin một kí tự (sử dụng trong tập tin văn bản hoặc nhị phân có khác biệt)

 

  1. Một số hàm xử lí dùng cho tập tin nhị phân (xem MSDN)

Tên hàm

Chức năng

putw

Ghi một số nguyên lên tập tin

getw

Đọc một số nguyên từ tập tin

fwrite

Ghi các mẫu tin (có cấu trúc định trước) lên tập tin

fread

Đọc các mẫu tin (có cấu trúc định trước) từ tập tin

fseek

Di chuyển con trỏ chỉ vị đến vị trí mong muốn

ftell

Cho biết vị trí hiện tại của con trỏ chỉ vị

 

5.Các ví dụ về đọc/ghi tập tin văn bản và nhị phân

  • Ghi tập tin văn bản

      #include <stdio.h>

     void main()

    {

        int a[10] = {10,9,8,7,6,5,4,3,2,1};

        FILE *f = fopen("number_text.txt", "wt");

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

       {

            printf("%3d", a[i]);

            fprintf(f,"%d\n",a[i]);

       }

       fclose(f);

    }

  • Đọc tập tin văn bản

      #include <stdio.h>

     void main()

    {

        int a;

        FILE *f = fopen("number_text.txt", "rt");                 // mở tập tin để đọc dạng text

        while (!feof(f))                                                       // kiểm tra đến cuối tập tin chưa

        {

            fscanf(f,"%d",&a);                                            // đọc dữ liệu dạng text vào biến a

            printf("%3d", a);

       }

       fclose(f);                                                                // đóng tập tin sau khi làm xong

   }

  • Ghi tập tin nhị phân

     #include <stdio.h>

    typedef struct

    {

      char mssv[10];

      char name[30];

    }SV;

    void main()

   {

          int i;

          SV arr[5];  

          FILE *f = fopen("number_binary.bin", "wb");

           for (i = 0; i < 5; i++)

          {

              printf("Nhap MSSV: ");

              gets(arr[i].mssv);

              printf("Nhap ten:  ");

             gets(arr[i].name);

         }

         for (i = 0; i < 5; i++)

            fwrite(&arr[i], sizeof(SV), 1, f);           

      fclose(f);   

}

  • Đọc tập tin nhị phân

      #include <stdio.h>

     typedef struct

   {

        char mssv[10];

        char name[30];

    }SV;

 

   void main()

   {

        int i;

        SV arr[5];  

        FILE *f = fopen("number_binary.bin", "rb");

        for (i = 0; i < 5; i++)

        {

            fread(&arr[i], sizeof(SV), 1, f);             

            printf("MSSV: %s\nHo ten: %s\n\n", arr[i].mssv, arr[i].name);

        }

       fclose(f);   

  }

 

Chủ đề liên quan
Xử lý File với C++

Cùng chuyên mục

Xem nhiều hôm nay