Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชัน fread() ใน C++

fread() คืออะไร?

fread() เป็นฟังก์ชันในตัวของ C++ ซึ่งใช้สำหรับ อ่านบล็อกข้อมูล (block of data) จากสตรีม (stream) ฟังก์ชันนี้นับจำนวนวัตถุ (objects) แต่ละอันมีขนาด size ไบต์ จากสตรีม และจัดเก็บไว้ในหน่วยความจำบัฟเฟอร์ (buffer) ตำแหน่งตัวชี้ (position pointer) จะเคลื่อนที่ไปข้างหน้าตามจำนวนไบต์ที่อ่านทั้งหมด จำนวนไบต์ที่อ่านได้หากสำเร็จจะเท่ากับ size * count

ไวยากรณ์ (Syntax)

size_t fread(void *buffer, size_t size, size_t count, FILE *file_stream);

พารามิเตอร์ (Parameters)

ฟังก์ชันนี้ต้องการพารามิเตอร์ทั้ง 4 ตัว:

  • buffer - พอยน์เตอร์ไปยังบล็อกหน่วยความจำบัฟเฟอร์ที่จะจัดเก็บไบต์ที่อ่านจากสตรีม
  • size - กำหนดขนาดของแต่ละองค์ประกอบที่จะอ่าน ในหน่วยไบต์ (size_t เป็น unsigned integer)
  • count - จำนวนองค์ประกอบที่จะอ่าน
  • file_stream - พอยน์เตอร์ของสตรีมไฟล์ที่ต้องการอ่านไบต์จาก

ค่าที่ส่งคืน (Return Value)

ส่งคืนจำนวนองค์ประกอบที่อ่านสำเร็จ (จำนวนเต็ม)

หากเกิดข้อผิดพลาดในการอ่าน หรือถึง end-of-file จำนวนองค์ประกอบที่ส่งคืนจะต่างจากตัวแปร count

ตัวอย่างที่ 1: อ่านไฟล์ข้อความ

#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    FILE* file_stream;
    char buf[100];
    file_stream = fopen("tp.txt", "r");
    if (!file_stream) {
        cerr << "เปิดไฟล์ไม่ได้\n";
        return 1;
    }
    // อ่านไฟล์จนถึง end-of-file
    while (!feof(file_stream)) {
        // อ่านเนื้อหาไฟล์
        size_t read_count = fread(buf, sizeof(buf), 1, file_stream);
        if (read_count > 0)
            cout << buf;
    }
    fclose(file_stream);
    return 0;
}

สมมติไฟล์ tp.txt มีเนื้อหา:

tutorialspoint
Contribution
anything here

ผลลัพธ์ (Output)

tutorialspoint Contribution anything here

ตัวอย่างที่ 2: ทดสอบ count=0 และ size=0

#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    FILE *fp;
    char buffer[100];
    size_t retVal;
    fp = fopen("tpempty.txt", "rb");
    if (!fp) {
        cerr << "เปิดไฟล์ไม่ได้\n";
        return 1;
    }
    retVal = fread(buffer, sizeof(buffer), 0, fp);
    cout << "count = 0, ค่าที่ส่งคืน = " << retVal << endl;
    retVal = fread(buffer, 0, 1, fp);
    cout << "size = 0, ค่าที่ส่งคืน = " << retVal << endl;
    fclose(fp);
    return 0;
}

ผลลัพธ์ (Output)

count = 0, ค่าที่ส่งคืน = 0
size = 0, ค่าที่ส่งคืน = 0

ฟังก์ชันที่เกี่ยวข้อง: fwrite() (เขียนบล็อกข้อมูล), fgetc()/fputc() (อ่าน/เขียนตัวอักษรเดี่ยว), fgets()/fputs() (อ่าน/เขียนสตริง), feof() (ตรวจสอบ end-of-file), ferror() (ตรวจสอบข้อผิดพลาด)