Input/output with files

ในบทสุดท้ายของบทเรียนภาษา C++ นี้ คุณจะได้เรียนการดำเนินการพื้นฐานกับไฟล์ โดยเราสามารถที่อ่านและเขียนบางอย่างลงไปใน text ไฟล์ fstream เป็นไลบรารีมาตรฐานที่ช่วยให้เราสามารถดำเนินการบางอย่างกับไฟล์ โดยจะมี 3 steam classes ในไลบรารี่ที่แสดงในรายการข้างล่างนี้

  • ofstream: Stream class เพื่อเขียนข้อมูลลงไฟล์
  • ifstream: Stream class เพื่ออ่านข้อมูลจากไฟล์
  • fstream: Stream class เพื่ออ่านข้อมูลและเขียนข้อมูลกับไฟล์

อย่างไรก็ตาม ในบทนี้เราจะทำงานกับแค่ text ไฟล์เท่านั้น

การเปิดไฟล์

สิ่งแรกที่คุณจะต้องทำก่อนที่จะทำบางอย่างกับไฟล์คือการเปิดไฟล์ เราสามารถเลือกใช้จากหนึ่งของสามคลาสที่เหมาะสมกับสิ่งที่เราต้องการจะทำได้ เพื่อที่จะเขียนหรืออ่าน และฟังก์ชันที่ใช้ในการเปิดไฟล์คือ open() นี่เป็นรูปแบบของการใช้งานฟังก์ชัน

open(path, mode);

ในการใช้งานฟังก์ชัน open() มีโหมดต่างๆ สำหรับการเปิดไฟล์ที่ใช้งาน ข้างล่างนี้เป็นตารางของโหมดต่างๆ ในการเปิดไฟล์ด้วยฟังก์ชัน

โหมดคำอธิบาย
ios::inเปิดไฟล์สำหรับการอ่านข้อมูลจากไฟล์
ios::outเปิดไฟล์สำหรับการเขียนข้อมูลลงไปในไฟล์
ios::binaryโหมดไฟล์สำหรับการทำงานในโหมด binary
ios::ateเปิดไฟล์และกำหนดให้ไฟล์ pointer ชี้ไปยังส่วนท้ายของไฟล์ ถ้าหากเราไม่กำหนด flag นี้จะชี้ไปที่จุดเริ่มต้นแทน
ios::appเปิดไฟล์สำหรับการเขียนข้อมูลลงไปต่อท้ายของไฟล์
ios::truncถ้าหากไฟล์ถูกเปิดสำหรับใหม่เขียนลงไปในไฟล์และมีไฟล์อยู่ โปรแกรมจะทำการลบไฟล์และสร้างใหม่

สำหรับการเปิดไฟล์ด้วย stream object แต่ละแบบในภาษา C++ นั้นมีโหมดพื้นฐาดังนี้

คลาสDefault โหมดเมื่อสร้างออบเจ็ค
ofstreamios::out
ifstreamios::in
fstreamios::in | ios::out

มาดูตัวอย่างการเปิดไฟล์ในแบบต่างๆ

// open for write
ofstream myfile1;
myfile1.open("example1.txt");

// open file for read
ifstream myfile2;
myfile2.open("example2.txt");

// open file for read and write
ofstream myfile3;
myfile3.open("example3.txt");

// open file for write and appending
ofstream myfile4;
myfile4.open("example4.txt", std::ios::out | std::ios::app);

ในตัวอย่าง ตัวแปร myfile1 เป็นการเปิดไฟล์สำหรับการเขียน ตัวแปร myfile2 เป็นการเปิดไฟล์สำหรับการอ่าน และตัวแปร myfile3 เป็นการเปิดไฟล์สำหรับการกระทำทั้งสองอย่างในเวลาเดียวกัน และสุดท้ายตัวแปร myfile4 เป็นการเปิดไฟล์สำหรับการเขียนและเขียนต่อท้ายโดยการกำหนดโหมด

Closing a file

หลังจากเราเสร็จงานของเราแล้ว เราต้องผิดไฟล์โดยการใช้ฟังก์ชัน close()

myfile1.close();
myfile2.close();
myfile3.close();

การเขียนข้อมูลลงไฟล์ (text files)

เราสามารถเขียนตัวอักษร ข้อความหรือตัวเลข ลงไปในไฟล์โดยการใช้เครื่องหมาย << กับไฟล์ที่เราต้องการจะเขียนไปยัง

#include <iostream>
#include <fstream>
using namespace std;

int main () {
ofstream myfile;
myfile.open ("example.txt");
myfile << "This is the first line.\n";
myfile << "The second line.\n";
myfile << 10.5;
myfile.close();
return 0;
}

ในตัวอย่าง เราได้เปิดไฟล์ example.txt และเขียนข้อความลงไปสองบรรทัด และตัวเลขอีกหนึ่งบรรทัด และปิดไฟล์หลังจากที่เขียนเสร็จแล้ว เมื่อคุณเปิดดูไฟล์ example.txt สิ่งที่คุณเห็นในไฟล์ควรจะเป็นแบบนี้

This is the first line.
The second line.
10.5

การอ่านข้อมูลจากไฟล์ (text files)

หลังจากที่เขียนข้อมูลลงไปในไฟล์แล้วต่อไป เราจะมาอ่านเนื้อหาจากไฟล์ที่เราได้เพิ่งเขียนลงไปด้วย file stream ifstream นี่เป็นตัวอย่างของโปรแกรมในการอ่านข้อมูลจากไฟล์ในภาษา C++

#include <iostream>
#include <fstream>
using namespace std;

int main () {
ifstream myfile;
string line;
myfile.open ("example.txt");
while ( getline (myfile,line) )
{
cout << line << '\n';
}
myfile.close();
return 0;
}

ในตัวอย่าง เราใช้ while-loop วนรอบเพื่ออ่านข้อมูลจากไฟล์ทีละบรรทัด ฟังก์ชัน getline() เป็นฟังก์ชันของ string ที่ช่วยให้เราสามารถอ่านข้อมูลมาทีละบรรทัดและใส่ไว้ในตัวแปร line และฟังก์ชัน getline() จะไม่อ่านการขึ้นบรรทัดใหม่ (\n) ในไฟล์มาด้วย มันจะวนซ้ำจนกว่าจะอ่านไปจนสิ้นสุดบรรทัดสุดท้ายของไฟล์

This is the first line.
The second line.
10.5

นี่เป็นผลลัพธ์การทำงานของโปรแกรมที่เราได้อ่านจากไฟล์ example.txt

การเขียนไฟล์ต่อท้าย (File appending)

ในตัวอย่างก่อนหนัาเป็นการเขียนข้อมูลลงใน text file แบบปกติ ซึ่งโดยปกติแล้วเมื่อเราไม่ได้ใส่ตัวเลือกการเปิดไฟล์ในพารามิเตอร์ที่สองของฟังก์ชัน open() ในบางครั้งโปรแกรมของเราก็อยากที่จะเขียนโปรแกรมต่อท้ายไฟล์เดิม เพื่อรักษาข้อมูลเดิมของเรา ในภาษา C++ นั้นเราจะใช้ option std::fstream::app สำหรับการเขียนข้อมูลต่อท้ายไฟล์เดิม นี่เป็นตัวอย่างของโปรแกรม

#include <fstream>

int main () {

std::fstream myfile;
myfile.open ("example.txt",
std::ios::in | std::ios::out | std::ios::app);

myfile << "\nappend new text to the file.\n";
myfile << "marcuscode.com\n";

myfile.close();

return 0;
}

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

myfile.open ("example.txt", std::ios::in | std::ios::out | std::ios::app);

ในฟังก์ชัน open() เราได้เปิดไฟลฺ์และใส่พารามิเตอร์ตัวที่สอง ซึ่งเป็นตัวเลือกในการเปิดไฟล์สำหรับอ่าน เขียน และต่อท้าย และหลังจากนั้นเราเขียนข้อมูลอีกสองบรรทัดลงไปในไฟล์ของเรา และเมื่อรันโปรแกรมจะปรากฎข้อความสองบรรทัดดังกล่าวต่อที่ท้ายของไฟล์

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


บทความเกี่ยวกับ Input/output with files

Input/output with files ในภาษา C

ในบทสุดท้ายของบทเรียนนี้ เราจะเรียนรู้เกี่ยวกับไฟล์ในภาษา C เช่น การเปิดไฟล์ การอ่านข้อมูลจากไฟล์ และการเขียนข้อมูลลงไปบนไฟล์ ทั้ง text file และ binary file ในก...

Input/output with files ในภาษา Java

ในบทนี้ คุณจะได้เรียนรู้การทำงานกับไฟล์ การอ่าน text file และการเขียนข้อมูลลงบน text file ในภาษา Java นอกจากหน่วยความจำสำรอง (ram) ที่สามารถเก็บข้อมูลได้ชั่วครา...

Input/output with files ในภาษา PHP

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการอ่านเขียนข้อมูลกับไฟล์ในภาษา PHP เราจะทำงานกับ Text filesในการเขียนโปรแกรม เรามักจะทำงานกับไฟล์ซึ่งอาจจะเป็น Text file หรือ ...

Input/output with files ในภาษา Visual Basic

ในบทนี้เราจะทำงานกับไฟล์ คุณจะได้เรียนรู้เกี่ยวกับการอ่านและเขียน text file ในภาษา Visual Basicโปรแกรมคอมพิวเตอร์มักจะทำงานกับไฟล์ ไฟล์ใช้สำหรับเก็บข้อมูลบนหน่ว...

Input/output with files ในภาษา C#

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการเขียนโปรแกรมในการทำงานกับไฟล์ เพื่ออ่านข้อมูลจากไฟล์และเขียนข้อมูลลงไปบนไฟล์ในภาษา C#โปรแกรมคอมพิวเตอร์ส่วนมากทำงานกับไฟล์ ซ...