0Pricing
C++ Academy · บทเรียน

การอ่านไฟล์ด้วย ifstream

อ่านข้อความและข้อมูล

การอ่านไฟล์ด้วย ifstream เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ifstream คืออะไร

std::ifstream (สตรีมไฟล์ข้อมูลเข้า) ใช้อ่านข้อมูลจากไฟล์ โดยทำงานคล้ายกับ std::cin แต่แหล่งข้อมูลของมันคือไฟล์บนดิสก์

  • กำหนดไว้ใน <fstream>
  • เปิดไฟล์ตามชื่อไฟล์ในตัวสร้างของมัน
#include <iostream>
#include <fstream>

int main() {
    std::ofstream("demo.txt") << "hello\n";
    std::ifstream in("demo.txt");
    std::string word;
    in >> word;
    std::cout << word << '\n';
    return 0;
}

การเปิดไฟล์

สร้าง ifstream ด้วยชื่อไฟล์ จากนั้นตรวจสอบด้วย is_open() ว่าพบไฟล์หรือไม่

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("data.txt") << "42\n";
    std::ifstream in("data.txt");
    std::cout << (in.is_open() ? "opened" : "failed") << '\n';
    return 0;
}

การอ่านคำ

ตัวดำเนินการ >> จะอ่านโทเค็นที่คั่นด้วยช่องว่าง เช่นเดียวกับการใช้ cin

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("words.txt") << "alpha beta gamma\n";
    std::ifstream in("words.txt");
    std::string w;
    while (in >> w) std::cout << w << '\n';
    return 0;
}

การอ่านตัวเลข

คุณสามารถดึงข้อมูลชนิดตัวเลขได้โดยตรง การดึงข้อมูลจากสตรีมจะแปลงข้อความให้เป็นชนิดข้อมูลที่ถูกต้อง

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("nums.txt") << "10 20 30\n";
    std::ifstream in("nums.txt");
    int sum = 0, x;
    while (in >> x) sum += x;
    std::cout << "sum = " << sum << '\n';
    return 0;
}

การอ่านบรรทัดด้วยการอ่านทีละบรรทัด

ใช้ std::getline() เพื่ออ่านบรรทัดทั้งหมดรวมถึงช่องว่าง จนถึงอักขระขึ้นบรรทัดใหม่

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ofstream("lines.txt") << "first line\nsecond line\n";
    std::ifstream in("lines.txt");
    std::string line;
    while (std::getline(in, line)) std::cout << "[" << line << "]\n";
    return 0;
}

การอ่านไฟล์ทั้งไฟล์

หากต้องการอ่านไฟล์ทั้งหมดในครั้งเดียว ให้อ่านไฟล์ลงในสตริงโดยใช้ตัววนซ้ำของบัฟเฟอร์สตรีม

#include <iostream>
#include <fstream>
#include <sstream>

int main() {
    std::ofstream("all.txt") << "line1\nline2\n";
    std::ifstream in("all.txt");
    std::stringstream ss;
    ss << in.rdbuf();
    std::cout << ss.str();
    return 0;
}

การตรวจจับจุดสิ้นสุดไฟล์

ลูปอ่านข้อมูลจะสิ้นสุดเมื่อการดึงข้อมูลล้มเหลว ซึ่งมักเกิดขึ้นเมื่อถึงจุดสิ้นสุดไฟล์ การทดสอบสตรีมในเงื่อนไขจะตรวจสอบเหตุการณ์นี้

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("eof.txt") << "1 2 3\n";
    std::ifstream in("eof.txt");
    int x, count = 0;
    while (in >> x) ++count;
    std::cout << "read " << count << " numbers\n";
    std::cout << "eof: " << std::boolalpha << in.eof() << '\n';
    return 0;
}

การจัดการไฟล์ที่หายไป

หากไม่มีไฟล์อยู่ สตรีมจะอยู่ในสถานะล้มเหลว และ is_open() จะเป็นเท็จ โปรดตรวจสอบทุกครั้งก่อนอ่านข้อมูล

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("does_not_exist_12345.txt");
    if (!in) {
        std::cout << "could not open file\n";
    }
    return 0;
}

การแยกวิเคราะห์บรรทัดที่มีโครงสร้าง

ใช้ getline ร่วมกับ istringstream เพื่อแยกฟิลด์ออกจากแต่ละบรรทัด

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main() {
    std::ofstream("people.txt") << "Alice 30\nBob 25\n";
    std::ifstream in("people.txt");
    std::string line;
    while (std::getline(in, line)) {
        std::istringstream ss(line);
        std::string name; int age;
        ss >> name >> age;
        std::cout << name << " is " << age << '\n';
    }
    return 0;
}

การเปิดและปิดอย่างชัดเจน

คุณสามารถเปิดสตรีมที่สร้างโดยไม่มีค่าเริ่มต้นภายหลังด้วย open() และปล่อยสตรีมด้วย close()

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("oc.txt") << "data\n";
    std::ifstream in;
    in.open("oc.txt");
    std::string s; in >> s;
    in.close();
    std::cout << s << '\n';
    return 0;
}

RAII ปิดให้โดยอัตโนมัติ

เมื่อ ifstream ออกจากขอบเขตการใช้งาน ตัวทำลายของมันจะปิดไฟล์โดยอัตโนมัติ โดยทั่วไปแทบไม่จำเป็นต้องเรียก close() ด้วยตนเอง

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("raii.txt") << "x\n";
    {
        std::ifstream in("raii.txt");
        std::string s; in >> s;
        std::cout << s << '\n';
    } // file closed here automatically
    std::cout << "closed\n";
    return 0;
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการอ่านบรรทัด

ทบทวน

คุณได้เรียนรู้ว่า std::ifstream:

  • อ่านข้อมูลจากไฟล์โดยใช้ >> และ std::getline
  • ควรตรวจสอบด้วย is_open() หรือทดสอบสตรีมโดยตรง
  • จะปิดโดยอัตโนมัติผ่าน RAII เมื่อออกจากขอบเขตการใช้งาน

ถัดไป คุณจะได้เรียนรู้การเขียนไฟล์ด้วย ofstream

คำถามที่พบบ่อย

บทเรียน “การอ่านไฟล์ด้วย ifstream” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่านไฟล์ด้วย ifstream” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านไฟล์ด้วย ifstream”

อ่านข้อความและข้อมูล คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่านไฟล์ด้วย ifstream” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอ่านไฟล์ด้วย ifstream
  2. การเขียนไฟล์ด้วย ofstream
  3. อินพุต/เอาต์พุตไฟล์ไบนารี
  4. การจัดการข้อผิดพลาดและสถานะ
← กลับไปที่ C++ Academy