C++Fstream文件流與freopen重定向操作教程
大家好,這是我第一次寫博客,請(qǐng)大家多多支持!
本文是作者原創(chuàng)文章,寫了好幾個(gè)小時(shí),所以麻煩轉(zhuǎn)載請(qǐng)注明出處!
目錄freopen重定向fstream文件流freopen 重定向
使用方法:
freopen(“in.txt”,“r”,stdin);//從in.txt讀入
freopen(“out.txt”,“w”,stdout);//向out.txt輸出
freopen(“CON”,“r”,stdin);//從控制臺(tái)讀入
freopen(“CON”,“w”,stdout);//向控制臺(tái)輸出
fclose(stdin);//關(guān)閉輸入,可以省略,但建議加上
fclose(stdout);//關(guān)閉輸出,可以省略,但建議加上
默認(rèn)是從控制臺(tái)(Command)讀入,輸出哦!
實(shí)例
#include<iostream> #include<cstdio>//freopen要包含cstdio頭文件 using namespace std; int main() { freopen("in.txt","r",stdin);//從in.txt讀入 freopen("out.txt","w",stdout);//向out.txt輸出 int a; cin >> a; cout << a; fclose(stdin);//關(guān)閉輸入,可以省略,但建議加上 fclose(stdout);//關(guān)閉輸出,可以省略,但建議加上 return 0; }
代碼寫好了,我們編譯,但先不要運(yùn)行。
然后再新建in.txt,往里面寫上666,保存,退出。
然后我們運(yùn)行main.exe,然后打開out.txt(可能有2,3秒的延遲,刷新即可)
瞧,成功了!
更多
stdin:標(biāo)準(zhǔn)輸入
stdout:標(biāo)準(zhǔn)輸出
“r”:Read,讀
“w”,Write,寫
由于fopen比較麻煩,我就不贅述了,可以去看其他博主的文章。
可以看一下這兩篇: 博客
博客還有fread和fwrite,大家可以借鑒以下。
優(yōu)缺點(diǎn)
使用方便,但不能方便在控制臺(tái)與文件之間轉(zhuǎn)換,且使用后system(“cls”)清屏?xí)А?/p>
fstream文件流
要使用fstream,您需要:
#include<fstream> using namespace std;
兩個(gè)構(gòu)造函數(shù)的原型:
basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in) basic_ofstream(const char* __s, ios_base::openmode __mode = ios_base::out|ios_base::trunc)
__s代表文件名,如"in.txt",也可以是絕對(duì)路徑,但最好不要有中文和空格。(前面freopen也是一樣)
ios_base::openmode即打開屬性,可以是下面幾種值:
ios::in 輸入(ifstream默認(rèn))
ios::out 輸出(ofstream默認(rèn))
ios::app(append)附加在末尾
ios::ate(at end)從末尾開始
ios::trunc有則覆蓋,無則創(chuàng)建
ios::nocreate如字面意思,如不存在則打開失敗
ios::noreplace如字面意思,如存在則打開失敗
ios::binary以二進(jìn)制形式打開/關(guān)閉,一般都會(huì)被忽略
如果要疊加多個(gè)屬性,用位或運(yùn)算符 | 連接即可。
實(shí)例
#include<iostream> #include<fstream>//fstream using namespace std; int main() { ifstream fin("in.txt", ios::in/*可以省略*/); ofstream fout("out.txt", ios::out | ios::trunc/*可以省略*/); int a; fin >> a; fout << a << endl; fin.close(); fout.close(); return 0; }
和剛剛結(jié)果一樣,就不放圖片了。
ifstream fin是創(chuàng)建了一個(gè)ifstream對(duì)象(就像cin是iostream已經(jīng)幫我們創(chuàng)建的一個(gè)istream對(duì)象)
ofstream fout和上面差不多。
.close()一定要加!不然可能出錯(cuò)?。。?br />
這里這么取名,只是本人習(xí)慣,大家起其他的也行。
成員函數(shù)
fstream的成員函數(shù)是真心多啊,怪不得功能強(qiáng)大!
這里只給大家介紹一些常用的。
這里只給大家介紹istream,ostream基本一樣。
fin.open(const char* __s, ios_base::openmode __mode = ios_base::in);
和構(gòu)造函數(shù)差不多,不解釋了。
if (!fin/*或fin.bad()或!fin.good()*/) { cout << "Unable to open!" << endl; return 0; }
這個(gè)也很好懂,不解釋。
fin.eof() fin.fail() fin.bad() fin.good()
四個(gè)函數(shù)返回值都是bool。
如果遇到文件末尾,則eof返回true。
如果操作失敗,則fail返回true。
如果eof和fail都返回false,則bad返回false。
如果bad返回false,則good返回true。
很繞,是不是!其實(shí),根據(jù)字面意思,都很好懂。
還有各種各樣的功能,請(qǐng)大家自己去探索吧!
再給大家推薦一個(gè)博客吧,大家自己去看:博客
還有,希望大家養(yǎng)成一個(gè)好習(xí)慣,再打開文件后,使用
if(!fin) cout << "Fin open Fail" << endl; if(!fout) cout << "Fout open Fail" << endl;
來檢測(cè)是否成功!這樣做最保險(xiǎn)!
優(yōu)缺點(diǎn)
操作較為麻煩。但是功能挺多的,且十分強(qiáng)大!
總結(jié)
到此這篇關(guān)于C++Fstream文件流與freopen重定向操作教程的文章就介紹到這了,更多相關(guān)C++ Fstream文件流與freopen重定向內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用C/C++代碼檢測(cè)ip能否ping通(配合awk和system可以做到批量檢測(cè))
今天小編就為大家分享一篇關(guān)于用C/C++代碼檢測(cè)ip能否ping通(配合awk和system可以做到批量檢測(cè)),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04C++11運(yùn)算符重載和向量類重載實(shí)例詳解(<<,>>,+,-,*等)
這篇文章主要給大家介紹了關(guān)于C++11運(yùn)算符重載和向量類重載的相關(guān)資料,主要包括<<,>>,+,-,*等,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07c++連續(xù)輸入未知個(gè)數(shù)的數(shù)字操作
這篇文章主要介紹了c++連續(xù)輸入未知個(gè)數(shù)的數(shù)字操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12C語言對(duì)堆排序一個(gè)算法思路和實(shí)現(xiàn)代碼
這篇文章主要介紹了C語言對(duì)堆排序一個(gè)算法思路和實(shí)現(xiàn)代碼,堆排序是一種樹形選擇排序,是對(duì)直接選擇排序的有效改進(jìn),需要的朋友可以參考下2014-06-06對(duì)一個(gè)數(shù)組進(jìn)行zig-zag重新排列
本文介紹了“對(duì)一個(gè)數(shù)組進(jìn)行zig-zag重新排列”,需要的朋友可以參考一下2013-03-03Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解
這篇文章主要介紹了Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解,對(duì)于學(xué)習(xí)Windows程序設(shè)計(jì)來說是非常重要的一課,需要的朋友可以參考下2014-08-08數(shù)據(jù)結(jié)構(gòu)之帶頭結(jié)點(diǎn)的單鏈表
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個(gè)結(jié)點(diǎn)的構(gòu)成:數(shù)據(jù)域(數(shù)據(jù)元素的映象)?+?指針域(指示后繼元素存儲(chǔ)位置),元素就是存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元,指針就是連接每個(gè)結(jié)點(diǎn)的地址數(shù)據(jù)2023-07-07