读书人

怎么从ifstream中读取数据并存到strin

发布时间: 2012-03-04 11:13:33 作者: rapoo

如何从ifstream中读取数据并存到string中
我有一个ifstream对象,使用binary方式打开了某文件。
我要从这个ifstream对象中读取若干字节并存到一个string对象中。

我知道有一个笨办法是每次读到一个char缓冲区中再复制到string中,但是我不想这么做。

[解决办法]

C/C++ code
#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;}
[解决办法]
C/C++ code
#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函数用于把一个流的内容用另一个流对象输出,可直接如下:

C/C++ code
#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; }
[解决办法]
读出指定字节数,并且包含回车符号等等
C/C++ code
#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;} 

读书人网 >C++

热点推荐