2012-09-25 84 views
0

假設我有與C語法打開傳輸內容到C++流

FILE* fp = fopen("whatever.txt", "w"); 
// Library function needs FILE* to work on 
libray_function(fp); 

// Now I'd like to copy the contents of file to std::cout 
// How??? 

fclose(fp); 

我希望能夠在該文件中的內容複製在C++的ostream(如stringstream或文件甚至可能是std::cout)。我怎樣才能做到這一點?

+0

出了什麼問題'fread',並把數據成一個字符串? –

回答

0

先關閉它。

fclose(fp); 

然後再次打開

string line; 
ifstream myfile ("whatever.txt"); 
if (myfile.is_open()) 
{ 
    while (myfile.good()) 
    { 
     getline (myfile,line); 
     cout << line << endl; 
    } 
    myfile.close(); 
} 
+1

這是C++,你肯定幾乎從不需要/想要使用'is_open','good'或'close',OP也不會說任何關於基於行的數據。另見[這個問題](http://stackoverflow.com/q/5605125/743214)。 –

+0

嗯....謝謝。我懂了。他不是要求基於行的數據... – shan

1

您已經打開文件進行寫入。無論如何,你需要關閉它並重新打開它,不過,如果你願意,你可以打開它(如果你願意的話,可以作爲一個流言蜚語)。那麼這取決於你對性能的關心程度。如果你真的關心,你應該閱讀塊(一次至少512字節)。如果你不關心性能,你可以讀一個字節,吐出一個字節。

3

你可以使用一個ifstreamrdbuf()

#include <fstream> 
#include <sstream> 

std::ifstream in("whatever.txt"); 
std::ostringstream s; 
s << in.rdbuf(); 

或:

std::ifstream in("whatever.txt"); 
std::cout << in.rdbuf(); 
+0

你確定這會工作嗎? – PiotrNycz

+0

@PiotrNycz,是的。有沒有理由認爲它不會? – hmjd

+0

我認爲它只適用於所有內容在streambuf中的stringstream。對於filebuf,我認爲在緩衝區中並不常見的是說整個1GB文件......但我沒有嘗試。只是好奇你有任何鏈接描述這個'os << buf'運算符? – PiotrNycz