ใน C เราสามารถใช้ฟังก์ชัน freopen() เพื่อจุดประสงค์ในการเปลี่ยนเส้นทาง เมื่อใช้ฟังก์ชันนี้ เราสามารถเปลี่ยนเส้นทางตัวชี้ FILE ที่มีอยู่ไปยังสตรีมอื่นได้ ไวยากรณ์ของ freeopen เป็นดังนี้:
FILE *freopen(const char* filename, const char* mode, FILE *stream)
ใน C ++ เราสามารถทำการเปลี่ยนเส้นทางได้ ใน C ++ สตรีมจะถูกใช้ ที่นี่เราสามารถใช้สตรีมของเราและเปลี่ยนเส้นทางสตรีมของระบบได้ ใน C++ มีสตรีมสามประเภท
- ไอสตรีม :สตรีมที่รองรับอินพุตเท่านั้น
- สตรีม :สตรีมที่รองรับเอาต์พุตเท่านั้น
- ไอโอสตรีม :สามารถใช้สำหรับอินพุตและเอาต์พุตได้
คลาสเหล่านี้และคลาสสตรีมไฟล์ได้มาจากคลาส ios และ stream-buf ดังนั้นอ็อบเจกต์สตรีมไฟล์สตรีมและ IO จึงมีพฤติกรรมคล้ายกัน C++ อนุญาตให้ตั้งค่าบัฟเฟอร์สตรีมเป็นสตรีมใดก็ได้ ดังนั้นเราจึงสามารถเปลี่ยน streambuffer ที่เชื่อมโยงกับสตรีมเพื่อเปลี่ยนเส้นทางได้ ตัวอย่างเช่น หากมีสองสตรีม Aและ B และเราต้องการเปลี่ยนเส้นทาง Stream A ไปยัง Stream B เราจำเป็นต้องทำตามขั้นตอนเหล่านี้:
- รับสตรีมบัฟเฟอร์ A และเก็บไว้
- ตั้งค่าสตรีมบัฟเฟอร์ A เป็นบัฟเฟอร์สตรีมอื่น B
- รีเซ็ตสตรีมบัฟเฟอร์ A เป็นตำแหน่งก่อนหน้า (ไม่บังคับ)
โค้ดตัวอย่าง
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { fstream fs; fs.open("abcd.txt", ios::out); string lin; // Make a backup of stream buffer streambuf* sb_cout = cout.rdbuf(); streambuf* sb_cin = cin.rdbuf(); // Get the file stream buffer streambuf* sb_file = fs.rdbuf(); // Now cout will point to file cout.rdbuf(sb_file); cout << "This string will be stored into the File" << endl; //get the previous buffer from backup cout.rdbuf(sb_cout); cout << "Again in Cout buffer for console" << endl; fs.close(); }
ผลลัพธ์
Again in Cout buffer for console
abcd.txt
This string will be stored into the File