ไลบรารีมาตรฐาน iostream มีสองวิธี cin เพื่อยอมรับอินพุตจากสตรีมอินพุตมาตรฐาน และ cout เพื่อพิมพ์เอาต์พุตไปยังเอาต์พุตสตรีมมาตรฐาน ในบทความนี้ เราจะเรียนรู้วิธีอ่านข้อมูลจากไฟล์ไปยังอ็อบเจกต์ของคลาสและวิธีเขียนข้อมูลในอ็อบเจกต์คลาสไปยังไฟล์
การอ่านและเขียนข้อมูลเข้าและออกจากไฟล์ต้องใช้ไลบรารีมาตรฐานอื่นของ C++
- ifstream − แสดงถึงสตรีมไฟล์อินพุตและอ่านข้อมูลจากไฟล์
- ของสตรีม − แสดงถึงสตรีมไฟล์เอาต์พุตและเขียนข้อมูลไปยังไฟล์
- สตรีม − แสดงถึงสตรีมไฟล์ทั่วไปและมีความสามารถทั้งสองอย่าง
การสร้างคลาสอ็อบเจ็กต์
เรากำลังนำคลาส Employee with Name, Employee_ID และ Salary มาเป็นสมาชิกข้อมูลสาธารณะ
class Employee { public: char Name[]; long Employee_ID; int Salary; } ; Employee Emp_1; Emp_1.Name=”Jhonson”; Emp_1.Employee_ID=212020; Emp_1.Salary=11000;
การสร้างวัตถุไฟล์
ไวยากรณ์
fstream/ofstream/ifstream object_name; void open(const char *filename, ios::openmode); ofstream file1; file1.open( “Employee.txt”, ios::app );
-
ที่นี่ file1 เป็นอ็อบเจ็กต์ที่ใช้เปิดไฟล์ Employee.txt ในโหมดผนวก (เนื้อหาใหม่จะถูกต่อท้าย) ประเภทของอ็อบเจกต์ file1 เป็น ofstream ซึ่งหมายความว่าเราสามารถเขียนลงใน Employee.txt ได้
ifstream file2; file2.open( “Employee.txt”, ios::in );
-
ที่นี่ file2 เป็นวัตถุที่ใช้เปิดไฟล์ Employee.txt ในโหมดป้อนข้อมูลเพื่ออ่านเนื้อหา ประเภทของวัตถุ file1 คือ ifstream ซึ่งหมายความว่าเราสามารถอ่านข้อมูลจาก Employee.txt เท่านั้น
การเขียนและการอ่านวัตถุของชั้นเรียน
file1.write( (char*)&Emp_1, sizeof(Emp1) );
-
ข้อมูลที่มีอยู่ในคลาสอ็อบเจ็กต์ Emp_1 นี้ถูกเขียนไปยังไฟล์ Employee.txt โดยเรียกใช้ฟังก์ชันการเขียน (char*)&Emp_1 ใช้เพื่อชี้ไปที่จุดเริ่มต้นของวัตถุ และ sizeof(Emp_1) จะคำนวณจำนวนไบต์ที่คัดลอกในไฟล์
file2.read( (char*)&Emp_1, sizeof(Emp1) );
-
ข้อมูลที่มีอยู่ในคลาสอ็อบเจ็กต์ Emp_1 นี้ถูกอ่านจากไฟล์ Employee.txt โดยเรียกใช้ฟังก์ชันการอ่าน (char*)&Emp_1 ใช้เพื่อชี้ไปที่จุดเริ่มต้นของอ็อบเจ็กต์ andsizeof(Emp_1) คำนวณจำนวนไบต์ที่อ่านจากไฟล์
ปิดไฟล์
file1.close(); file2.close();
เพื่อปิดสตรีมอินพุตและเอาต์พุตสตรีมของไฟล์
ตัวอย่าง
#include <iostream> #include <fstream> using namespace std; // Class to define the properties class Employee { public: string Name; int Employee_ID; int Salary; }; int main(){ Employee Emp_1; Emp_1.Name="John"; Emp_1.Employee_ID=2121; Emp_1.Salary=11000; //Wriring this data to Employee.txt ofstream file1; file1.open("Employee.txt", ios::app); file1.write((char*)&Emp_1,sizeof(Emp_1)); file1.close(); //Reading data from EMployee.txt ifstream file2; file2.open("Employee.txt",ios::in); file2.seekg(0); file2.read((char*)&Emp_1,sizeof(Emp_1)); printf("\nName :%s",Emp_1.Name); printf("\nEmployee ID :%d",Emp_1.Employee_ID); printf("\nSalary :%d",Emp_1.Salary); file2.close(); return 0; }
ผลลัพธ์
Name: John Employee ID: 2121 Salary: 11000