การอ่านไฟล์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านไฟล์ด้วย ifstream
- การเขียนไฟล์ด้วย ofstream
- อินพุต/เอาต์พุตไฟล์ไบนารี
- การจัดการข้อผิดพลาดและสถานะ