Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเปลี่ยนเส้นทาง I/O ใน C++


ใน 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