如何从ifstream中读取数据并存到string中
我有一个ifstream对象,使用binary方式打开了某文件。
我要从这个ifstream对象中读取若干字节并存到一个string对象中。
我知道有一个笨办法是每次读到一个char缓冲区中再复制到string中,但是我不想这么做。
[解决办法]
#include<iostream>#include<functional>#include<fstream>#include<iterator>#include<string>using namespace std;int main(){ ifstream ifs( "test.cpp" , ios_base::binary ); string str; std::copy(std::istream_iterator<unsigned char>(ifs),std::istream_iterator<unsigned char>(),back_inserter(str) ); cout<<str<<endl; return 0;}
[解决办法]
#include <fstream > #include <string>#include <sstream>using namespace std; int main () { ifstream inf("test.cpp", ios::binary); if(inf) { ostringstream os; os << inf.rdbuf(); cout << os.str(); } system("pause"); return 0; }
[解决办法]
rdbuf函数用于把一个流的内容用另一个流对象输出,可直接如下:
#include <fstream > #include <string>#include <sstream>using namespace std; int main () { ifstream inf("test.cpp", ios::binary); if(inf) { ostringstream os; cout <<inf.rdbuf; } system("pause"); return 0; }
[解决办法]
读出指定字节数,并且包含回车符号等等
#include <iostream>#include <fstream>#include <iterator>#include <algorithm>#include <string>#include <functional>using namespace std;class ReadBuffer:unary_function<string::iterator,void>{public: string &buffer; size_t length; ReadBuffer(string &buf, size_t len):buffer(buf),length(len){buffer.reserve(length);} void operator()( char c ) { if( buffer.size()<length ) { buffer+=c; } }};int main(){ const size_t N=10; ifstream infile( "test.txt", ios::binary ); if( infile.fail() ){ return 0; } string buffer; istreambuf_iterator<char> bg(infile); istreambuf_iterator<char> ed; for_each( bg,ed,ReadBuffer(buffer,N) ); copy( buffer.begin(),buffer.end(), ostream_iterator<char>(cout,"") ); return 0;}