您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關C++中Fstream文件流與freopen重定向的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
目錄freopen重定向fstream文件流freopen 重定向
使用方法:
freopen(“in.txt”,“r”,stdin);//從in.txt讀入
freopen(“out.txt”,“w”,stdout);//向out.txt輸出
freopen(“CON”,“r”,stdin);//從控制臺讀入
freopen(“CON”,“w”,stdout);//向控制臺輸出
fclose(stdin);//關閉輸入,可以省略,但建議加上
fclose(stdout);//關閉輸出,可以省略,但建議加上
默認是從控制臺(Command)讀入,輸出哦!
實例
#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);//關閉輸入,可以省略,但建議加上 fclose(stdout);//關閉輸出,可以省略,但建議加上 return 0; }
代碼寫好了,我們編譯,但先不要運行。
然后再新建in.txt,往里面寫上666,保存,退出。
然后我們運行main.exe,然后打開out.txt(可能有2,3秒的延遲,刷新即可)
瞧,成功了!
更多
stdin:標準輸入
stdout:標準輸出
“r”:Read,讀
“w”,Write,寫
由于fopen比較麻煩,我就不贅述了,可以去看其他博主的文章。
可以看一下這兩篇:??博客
博客還有fread和fwrite,大家可以借鑒以下。
優缺點
使用方便,但不能方便在控制臺與文件之間轉換,且使用后system(“cls”)清屏會失效。
fstream文件流
要使用fstream,您需要:
#include<fstream> using namespace std;
兩個構造函數的原型:
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",也可以是絕對路徑,但最好不要有中文和空格。(前面freopen也是一樣)
ios_base::openmode即打開屬性,可以是下面幾種值:
ios::in 輸入(ifstream默認)
ios::out 輸出(ofstream默認)
ios::app(append)附加在末尾
ios::ate(at end)從末尾開始
ios::trunc有則覆蓋,無則創建
ios::nocreate如字面意思,如不存在則打開失敗
ios::noreplace如字面意思,如存在則打開失敗
ios::binary以二進制形式打開/關閉,一般都會被忽略
如果要疊加多個屬性,用位或運算符 | 連接即可。
實例
#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; }
和剛剛結果一樣,就不放圖片了。
ifstream fin是創建了一個ifstream對象(就像cin是iostream已經幫我們創建的一個istream對象)
ofstream fout和上面差不多。
.close()一定要加!不然可能出錯!!!
這里這么取名,只是本人習慣,大家起其他的也行。
成員函數
fstream的成員函數是真心多啊,怪不得功能強大!
這里只給大家介紹一些常用的。
這里只給大家介紹istream,ostream基本一樣。
fin.open(const char* __s, ios_base::openmode __mode = ios_base::in);
和構造函數差不多,不解釋了。
if (!fin/*或fin.bad()或!fin.good()*/) { cout << "Unable to open!" << endl; return 0; }
這個也很好懂,不解釋。
fin.eof() fin.fail() fin.bad() fin.good()
四個函數返回值都是bool。
如果遇到文件末尾,則eof返回true。
如果操作失敗,則fail返回true。
如果eof和fail都返回false,則bad返回false。
如果bad返回false,則good返回true。
很繞,是不是!其實,根據字面意思,都很好懂。
還有各種各樣的功能,請大家自己去探索吧!
再給大家推薦一個博客吧,大家自己去看:博客
還有,希望大家養成一個好習慣,再打開文件后,使用
if(!fin) cout << "Fin open Fail" << endl; if(!fout) cout << "Fout open Fail" << endl;
來檢測是否成功!這樣做最保險!
優缺點
操作較為麻煩。但是功能挺多的,且十分強大!
感謝各位的閱讀!關于“C++中Fstream文件流與freopen重定向的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。