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() (ตรวจสอบข้อผิดพลาด)