সি-তে, আমরা পুনঃনির্দেশের উদ্দেশ্যে ফ্রিওপেন() ফাংশন ব্যবহার করতে পারি। এই ফাংশনটি ব্যবহার করে, আমরা বিদ্যমান FILE পয়েন্টারকে অন্য স্ট্রীমে পুনঃনির্দেশ করতে পারি। ফ্রিওপেনের সিনট্যাক্স নিচের মত:
FILE *freopen(const char* filename, const char* mode, FILE *stream)
C++ এও, আমরা পুনঃনির্দেশ করতে পারি। C++ এ, স্ট্রীম ব্যবহার করা হয়। এখানে আমরা আমাদের নিজস্ব স্ট্রীম ব্যবহার করতে পারি, এবং সিস্টেম স্ট্রীমকেও রিডাইরেক্ট করতে পারি। C++ এ, তিন ধরনের স্ট্রিম আছে।
- istream :স্ট্রীম, যা শুধুমাত্র ইনপুট সমর্থন করতে পারে
- ওস্ট্রিম :স্ট্রীম, যা শুধুমাত্র আউটপুট সমর্থন করতে পারে
- iostream :এগুলি ইনপুট এবং আউটপুটের জন্য ব্যবহার করা যেতে পারে৷
এই ক্লাস, এবং ফাইল স্ট্রিম ক্লাসগুলি ios এবং স্ট্রিম-বাফ ক্লাস থেকে নেওয়া হয়েছে। সুতরাং ফাইলস্ট্রিম এবং আইও স্ট্রিম অবজেক্ট একইভাবে আচরণ করে। C++ যেকোন স্ট্রীমে স্ট্রিম বাফার সেট করতে দেয়। তাই আমরা রিডাইরেক্ট করার জন্য স্ট্রীমের সাথে যুক্ত স্ট্রীমবাফার পরিবর্তন করতে পারি। উদাহরণস্বরূপ, যদি দুটি স্ট্রীম Aand B থাকে এবং আমরা স্ট্রীম A স্ট্রীম 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