可能有些人會覺得說用fstream另外寫就好了
不過程式如果有設定可以輸出至螢幕或是檔案的話
分開兩個寫就會讓人覺得很麻煩
可能有關輸出的部份都需要用if判斷,然後分兩塊輸出
如果在一開始就設定cout是輸出到螢幕或是檔案的話
之後就不用再用if來一個一個判斷了,這個是我覺得的優點
程式碼片段範例
bool readFromFile;
//根據一些判斷去設定readFromFile的值
readFromFile = true;
if(readFromFile)
{
ofstream outputFile;
string fileName = "file.txt";
outputFile.open(fileName, fstream::out);
cout.rdbuf(outputFile.rdbuf());
}
else //表示輸出到stdout
{
//不做任何事情 因為cout本來就是輸出到stdout
}
//之後就直接用cout就可以了~
參考網頁
http://www.java2s.com/Tutorial/Cpp/0240__File-Stream/Redirectouputintothefile.htm
文章標籤
全站熱搜

你的想法並非不可行,但這裡的程式犯了嚴重的錯誤,請重新想想看。 如果是隨用即丟的小程式,我習慣在命令列用 pipe 重導,而大一點的程式可以運用 ostream 的多型能力。當然,每次輸出都用 if 判斷就真的遜掉了。 僅供參考,時間不早所以先晚安了。
嗯嗯 現在回來看也是覺得你說的沒錯 程式一大 這樣寫會死人XDD
這裡分享一個重要的 C++ 觀念,當持有資源的物件(如fstream)回傳內部成員的指標時,請務必分清楚是屬於「轉移所有權」或者「分享使用權」。 對 fstream::rdbuf() 來說,情況是屬於「分享」而非「轉移」,也就是說 fstream 仍然掌握內部 filebuf 的生殺大權。 這個程式只要一離開 if 的作用域,outputFile 就會立刻把所持有的 filebuf 和 file handle 給幹掉,於是 cout 會參考到早已不存在的 filebuf 和 file handle。如果你之前這樣用沒出錯,只能說是僥倖