วิธีอ่านและเขียนไฟล์ใน C++

How Read Write File C



ในบทความนี้เราจะแสดงวิธีการอ่านและเขียนไฟล์ในภาษา C++ โดยใช้ตัวอย่างต่างๆ เพื่อให้เข้าใจการทำงานของไฟล์ C++ เช่น การอ่านและเขียน เราต้องเข้าใจแนวคิดของสตรีมใน C++ ก่อน

สตรีมคืออะไร?

สตรีมเป็นเพียงการไหลของข้อมูลหรืออักขระ สตรีมมีสองประเภท: สตรีมอินพุตและสตรีมเอาต์พุต สตรีมอินพุตใช้เพื่ออ่านข้อมูลจากอุปกรณ์อินพุตภายนอก เช่น แป้นพิมพ์ ในขณะที่สตรีมเอาต์พุตใช้เพื่อเขียนข้อมูลไปยังอุปกรณ์เอาต์พุตภายนอก เช่น จอภาพ ไฟล์ถือได้ว่าเป็นทั้งแหล่งอินพุตและเอาต์พุต









ใน C++ เราใช้สตรีมเพื่อส่งหรือรับข้อมูลไปยังหรือจากแหล่งภายนอก



เราสามารถใช้คลาสในตัวเพื่อเข้าถึงสตรีมอินพุต/เอาต์พุต เช่น ios





นี่คือลำดับชั้นสตรีมของภาษาการเขียนโปรแกรม C ++:



วัตถุ cin และ cout ใช้เพื่ออ่านข้อมูลจากแป้นพิมพ์และเพื่อแสดงเอาต์พุตบนจอภาพตามลำดับ นอกจากนี้ ifstream ซึ่งย่อมาจากสตรีมไฟล์อินพุต ใช้ในการอ่านสตรีมข้อมูลจากไฟล์ และ ofstream ซึ่งหมายถึง สตรีมไฟล์เอาต์พุต ใช้เพื่อเขียนสตรีมข้อมูลไปยังไฟล์

ไฟล์ iostram.h มีคลาสสตรีมอินพุต/เอาต์พุตมาตรฐานที่จำเป็นทั้งหมดในภาษาการเขียนโปรแกรม C++

ตัวอย่าง

เมื่อคุณเข้าใจพื้นฐานของสตรีมแล้ว เราจะพูดถึงตัวอย่างต่อไปนี้เพื่อช่วยให้คุณเข้าใจการทำงานของไฟล์ใน C++ ได้ดีขึ้น:

  • ตัวอย่างที่ 1: เปิดและปิดไฟล์
  • ตัวอย่างที่ 2: เขียนไปยังไฟล์
  • ตัวอย่างที่ 3: อ่านจากไฟล์
  • ตัวอย่างที่ 4: อ่านและเขียนไปยังไฟล์
  • ตัวอย่างที่ 5: อ่านและเขียนไปยังไฟล์ไบนารี

ตัวอย่างที่ 1: เปิดและปิดไฟล์

ในโปรแกรมตัวอย่างนี้ เราจะสาธิตวิธีการเปิด/สร้างไฟล์และวิธีปิดไฟล์ใน C++ ดังที่คุณเห็นในโปรแกรมด้านล่าง เราได้รวมไลบรารีที่จำเป็นสำหรับการทำงานของไฟล์

ในการเปิดและปิดไฟล์ เราต้องการอ็อบเจ็กต์ของสตรีม จากนั้น ในการอ่านหรือเขียนไฟล์ เราต้องเปิดไฟล์นั้น เราได้รวมไฟล์ส่วนหัว fstream ไว้ที่บรรทัดที่ 1 เพื่อให้เราสามารถเข้าถึงคลาสสตรีมได้

เราได้ประกาศ myFile_Handler เป็นอ็อบเจ็กต์ของสตรีมภายในฟังก์ชันหลัก จากนั้นเราสามารถใช้ฟังก์ชัน open() เพื่อสร้างไฟล์ว่างและฟังก์ชัน close() เพื่อปิดไฟล์

#รวม

โดยใช้ เนมสเปซชั่วโมง;

intหลัก()
{
ของสตรีม myFile_Handler;

// เปิดไฟล์
myFile_Handlerเปิด('ไฟล์_1.txt');

// ปิดไฟล์
myFile_Handlerปิด();
กลับ 0;
}

ตอนนี้เราจะคอมไพล์โปรแกรมและตรวจสอบผลลัพธ์ ดังที่คุณเห็นในหน้าต่างผลลัพธ์ด้านล่าง ไฟล์ File_1.txt ถูกสร้างขึ้นหลังจากรันโปรแกรม ขนาดของไฟล์เป็นศูนย์ เนื่องจากเรายังไม่ได้เขียนเนื้อหาใดๆ ลงในไฟล์

ตัวอย่างที่ 2: เขียนไปยังไฟล์

ในโปรแกรมตัวอย่างก่อนหน้านี้ เราได้แสดงวิธีการเปิดไฟล์และวิธีการปิดไฟล์ ตอนนี้เราจะแสดงวิธีเขียนบางอย่างในไฟล์

เราสามารถเขียนไฟล์โดยใช้ตัวดำเนินการแทรกกระแส นั่นคือ<<. In this program, we have used the file handler and insertion operator to write two lines in the file. The insertion operator (<<) indicates that we are inserting the string into the output file stream object.

#รวม

โดยใช้ เนมสเปซชั่วโมง;

intหลัก()
{
ของสตรีม myFile_Handler;
// เปิดไฟล์
myFile_Handlerเปิด('ไฟล์_1.txt');

// เขียนไปยังไฟล์
myFile_Handler<< 'นี่คือไฟล์ทดสอบตัวอย่าง ' <<endl;
myFile_Handler<< 'นี่คือบรรทัดที่สองของไฟล์ ' <<endl;

// ปิดไฟล์
myFile_Handlerปิด();
กลับ 0;
}

ตอนนี้เราจะคอมไพล์โปรแกรมข้างต้นและดำเนินการ ดังที่คุณเห็นด้านล่าง เราได้เขียนไปยังไฟล์ File_1.txt เรียบร้อยแล้ว

ตัวอย่างที่ 3: อ่านจากไฟล์

ในตัวอย่างก่อนหน้านี้ เราแสดงวิธีเขียนเนื้อหาลงในไฟล์ ตอนนี้ มาอ่านเนื้อหาจากไฟล์ที่เราสร้างใน Example-2 และแสดงเนื้อหาบนอุปกรณ์เอาต์พุตมาตรฐาน เช่น จอภาพ

เราใช้ฟังก์ชัน getline() เพื่ออ่านบรรทัดทั้งหมดจากไฟล์ จากนั้นให้พิมพ์บรรทัดบนจอภาพ

#รวม
#รวม
#รวม

โดยใช้ เนมสเปซชั่วโมง;

intหลัก()
{
ifstream myFile_Handler;
สตริง myLine;

// ไฟล์เปิดในโหมดอ่าน
myFile_Handlerเปิด('ไฟล์_1.txt');

ถ้า(myFile_Handlerเปิด())
{
// อ่านไฟล์ต่อไป
ในขณะที่(getline(myFile_Handler, myLine))
{
// พิมพ์บรรทัดบนเอาต์พุตมาตรฐาน
ค่าใช้จ่าย <<myLine<<endl;
}
// ปิดไฟล์
myFile_Handlerปิด();
}
อื่น
{
ค่าใช้จ่าย << 'ไม่สามารถเปิดไฟล์ได้!';
}
กลับ 0;
}

ตอนนี้ เราจะพิมพ์เนื้อหาของ File_1.txt โดยใช้คำสั่งต่อไปนี้ cat File_1.txt เมื่อเราคอมไพล์และรันโปรแกรม จะเห็นได้ชัดว่าผลลัพธ์ตรงกับเนื้อหาของไฟล์ ดังนั้นเราจึงอ่านไฟล์และพิมพ์เนื้อหาของไฟล์ไปยังจอภาพได้สำเร็จ

ตัวอย่างที่ 4: อ่านและเขียนไปยังไฟล์

จนถึงตอนนี้ เราได้แสดงวิธีการเปิด อ่าน เขียน และปิดไฟล์ให้คุณทราบแล้ว ใน C++ เรายังสามารถอ่านและเขียนไฟล์ได้ในเวลาเดียวกัน ในการอ่านและเขียนไฟล์ เราต้องรับวัตถุ fstream และเปิดไฟล์ในโหมด ios::in และ ios::out

ในตัวอย่างนี้ ก่อนอื่น เราเขียนเนื้อหาบางส่วนลงในไฟล์ จากนั้นเราอ่านข้อมูลจากไฟล์และพิมพ์ไปยังจอภาพ

#รวม
#รวม
#รวม

โดยใช้ เนมสเปซชั่วโมง;

intหลัก()
{
fstream myFile_Handler;
สตริง myLine;

// เปิดไฟล์
myFile_Handlerเปิด('ไฟล์_1.txt', ios::ใน |ios::ออก);

// ตรวจสอบว่าไฟล์เปิดอยู่หรือไม่
ถ้า(!myFile_Handler)
{
ค่าใช้จ่าย << 'ไฟล์ไม่เปิด!';
ทางออก(1);
}

// เขียนไปยังไฟล์
myFile_Handler<< '1. นี่เป็นไฟล์ทดสอบตัวอย่างอื่น ' <<endl;
myFile_Handler<< '2. นี่คือบรรทัดที่สองของไฟล์ ' <<endl;

myFile_Handlerแสวงหา(ios::ขอ);

// อ่านไฟล์
ถ้า(myFile_Handlerเปิด())
{
// อ่านไฟล์ต่อไป
ในขณะที่(getline(myFile_Handler, myLine))
{
// พิมพ์บรรทัดบนเอาต์พุตมาตรฐาน
ค่าใช้จ่าย <<myLine<<endl;
}

// ปิดไฟล์
myFile_Handlerปิด();
}
อื่น
{
ค่าใช้จ่าย << 'ไม่สามารถเปิดไฟล์ได้!';
}
myFile_Handlerปิด();
กลับ 0;
}

ตอนนี้เราจะคอมไพล์และรันโปรแกรม

ตัวอย่างที่ 5: อ่านและเขียนไปยังไฟล์ไบนารี

ในตัวอย่างนี้ เราจะประกาศคลาสแล้วเขียนอ็อบเจ็กต์ลงในไฟล์ไบนารี เพื่อให้ตัวอย่างนี้ง่ายขึ้น เราได้ประกาศคลาส Employee ด้วยตัวแปรสาธารณะ emp_id จากนั้นเราจะอ่านไฟล์ไบนารีและพิมพ์เอาต์พุตไปยังจอภาพ

#รวม
#รวม

โดยใช้ เนมสเปซชั่วโมง;

ระดับพนักงาน
{
สาธารณะ:
intemp_id;
};

intหลัก()
{
ของสตรีม binOutFile_Handler;
ifstream binInFile_Handler;

พนักงาน empObj_W, empObj_R;

// เปิดไฟล์
binOutFile_Handler.เปิด('employee.dat', ios::ออก |ios::ไบนารี่);

// ตรวจสอบว่าไฟล์เปิดอยู่หรือไม่
ถ้า(!binOutFile_Handler)
{
ค่าใช้จ่าย << 'ไฟล์ไม่เปิด!';
ทางออก(1);
}

// เริ่มต้น empObj_W
empObj_W.emp_id = 1512;

// เขียนไปยังไฟล์
binOutFile_Handler.เขียน((char *) &empObj_W,ขนาดของ(พนักงาน));
binOutFile_Handler.ปิด();

ถ้า(!binOutFile_Handler.ดี())
{
ค่าใช้จ่าย << 'เกิดข้อผิดพลาดขณะเขียนไฟล์ไบนารี!' <<endl;
ทางออก(2);
}

// ทีนี้มาอ่านไฟล์ employee.dat กัน
binInFile_Handlerเปิด('employee.dat', ios::ใน |ios::ไบนารี่);
// ตรวจสอบว่าไฟล์เปิดอยู่หรือไม่
ถ้า(!binInFile_Handler)
{
ค่าใช้จ่าย << 'ไฟล์ไม่เปิด!';
ทางออก(3);
}

// อ่านเนื้อหาของไฟล์ไบนารี
binInFile_Handlerอ่าน((char *) &empObj_R,ขนาดของ(พนักงาน));
binInFile_Handler.ปิด();

ถ้า(!binInFile_Handlerดี())
{
ค่าใช้จ่าย << 'เกิดข้อผิดพลาดขณะอ่านไฟล์ไบนารี!' <<endl;
ทางออก(4);
}

// พิมพ์ผลลัพธ์ของ empObj_R
ค่าใช้จ่าย << 'รายละเอียดพนักงาน : ' <<endl;
ค่าใช้จ่าย << 'รหัสพนักงาน : ' <<empObj_Remp_id <<endl;

กลับ 0;
}

บทสรุป

ไฟล์ส่วนใหญ่จะใช้เพื่อเก็บข้อมูล และมีบทบาทสำคัญในการเขียนโปรแกรมในโลกแห่งความเป็นจริง ในบทความนี้ เราแสดงให้คุณเห็นถึงวิธีการใช้การทำงานของไฟล์ต่างๆ ด้วยภาษาการเขียนโปรแกรม C++ โดยการทำงานผ่านตัวอย่างต่างๆ นอกจากนี้เรายังแสดงวิธีการอ่านและเขียนข้อมูลลงในไฟล์ข้อความและไฟล์ไบนารี