37.การเขียนและอ่านไฟล์อย่างง่ายใน C++

ถ้าเราต้องการให้ C++ เขียน text file ให้เรา เราจะต้องสร้าง object ใน class ofstream (อ่านว่า output-file-stream) ขึ้นมาก่อน class นี้จะอยู่ในไลบรารี fstream ครับ สมมติว่าผมการการสร้างไฟล์ที่ชื่อว่า score.txt มันจะเขียนโค้ดได้แบบนี้ครับ
คำสั่ง ios::out เป็นการบอกว่าเราสามารถเปลี่ยนแปลงข้อมูลในไฟล์ได้ครับ
ในการสร้างไฟล์เราจะเรียก method ที่ชื่อว่า open ของ class ofstream ก็ได้นะครับ ซึ่งถ้าเราใช้วิธีนี้ เมื่อเราจัดการเกี่ยวกับไฟล์เสร็จแล้วควรจะสั่งปิดไฟล์ ด้วยคำสั่ง close รูปแบบจะเป็นดังนี้ครับ
เมื่อทำการรันดูเราก็จะพบไฟล์ score.txt ใน directory เดียวกันกับ dirctory ของไฟล์ C++ ที่เราทำการรัน
REPORT THIS AD

ต่อไปเราจะลองมาเขียนอะไรบางอย่างในไฟล์นี้กันครับ การเขียนข้อมูลลงในไฟล์ก็ใช้รูปแบบเดียวกันกับ cout เลยครับ
เมื่อทำการรันโปรแกรม แล้วเปิดข้อมูลในไฟล์ score.txt ดู เราก็จะพบสิ่งที่เราพิมพ์ครับ
สมมติว่าผมต้องการรับข้อมูลผ่านทาง teminal โดยข้อมูลที่จะเขียนประกอบด้วย ชื่อนักเรียนกับคะแนน โดยในไฟล์พิมพ์ชื่อ แล้วตามด้วยการเคาะ tab (‘\t’) แล้วพิมพ์คะแนน แล้วขึ้นบรรทัดใหม่ (‘\n’) เราสามารถเขียนโปรแกรมได้ดังนี้ครับ
REPORT THIS AD

คำสั่ง cin>>name>>score จะให้ค่าเป็น false เมื่อผู้ใช้กด crtl+d สำหรับ unix หรือ crtl+z สำหรับ window
เมื่อลองทำการรันดูโดยกรอกข้อมูลดังนี้
เมื่อทำการดับเบิลคลิ๊กดูข้อมูลใน score.txt เราก็จะข้อมูลดังนี้ครับ
ทีนี้สมมติว่าเราต้องการเขียนไฟล์ score.txt บนคนละ directory กับไฟล์ C++ ล่ะ
สมมติว่าผมสร้าง folder ที่ชื่อว่า doc ขึ้นมาบน desktop
ผมต้องการให้ไฟล์ที่ชื่อ score.txt อยู่ใน folder นี้ ผมต้อง set path ให้กับให้กับมันด้วย
วิธีการทำคือให้เข้าไปใน directory ของ doc โดยใช้คำสั่ง cd doc (cd มาจากคำว่า change directory)
แล้วใช้คำสั่ง pwd (pwd มาจากคำว่า present working directory) เราก็จะเห็น path ของ doc
เราจะแก้ไขส่วน path ดังในรูป
เมื่อทำการรันดูเราจะได้ไฟล์ score.txt ใน folder doc แล้วล่ะครับ
ทีนี้มาถึงการอ่านไฟล์กันบ้างครับสมมติว่าไฟล์ที่เราต้องการอ่าน คือ score.txt อยู่ใน directory เดียวกันกับไฟล์ C++ ที่เราจะเขียน
การทำจะทำคล้ายกับการเขียนไฟล์ครับ โดยเริ่มต้นเราจะต้องสร้าง object ใน class ifstream ซึ่ง class นี้จะอยู่ในไลบรารี fstream เช่นกันครับ แล้วจึงจะทำการอ่านไฟล์ได้ครับ
คำสั่ง ios::in เป็นการบอกว่าไฟล์นี้เราจะอ่านอย่างเดียวเท่านั้น ส่วนที่ผมสั่ง readFile>> name >>score นั้น ถ้าข้อมูลในไฟล์ถูกอ่านหมดแล้วมันจะให้ค่าเป็น false ครับ ถ้ายังมีข้อมูลที่ยังอ่านไม่หมดมันให้ค่าเป็น true
REPORT THIS AD

เมื่อผมลองรันดูจะไดผลลัพธ์ประมาณนี้ครับ
หมายเหตุ เราอาจจะเขียนโค้ดในบรรทัดที่ 8 เป็นแบบนี้ก็ได้นะครับ
และถ้าหากไฟล์ที่เราจะอ่านอยู่คนละ diectory กับไฟล์ C++ เราก็จะต้องทำการ set path ให้ถูกต้องนะครับ โปรแกรมเราถึงจะทำการอ่านไฟล์ได้