c++中ifstream一次读取整个文件

来源:互联网 发布:教学视频的软件 编辑:程序博客网 时间:2024/06/06 12:48

c++中一次读取整个文件的内容的方法:

  1. 读取至char*的情况
std::ifstream t;  int length;  t.open("file.txt");      // open input file  t.seekg(0, std::ios::end);    // go to the end  length = t.tellg();           // report location (this is the length)  t.seekg(0, std::ios::beg);    // go back to the beginning  buffer = new char[length];    // allocate memory for a buffer of appropriate dimension  t.read(buffer, length);       // read the whole file into the buffer  t.close();                    // close file handle    // ... do stuff with buffer here ...  
  1. 读取至std::string的情况:

第一种方法:

#include <string>  #include <fstream>  #include <streambuf>    std::ifstream t("file.txt");  std::string str((std::istreambuf_iterator<char>(t)),                   std::istreambuf_iterator<char>()); 

第二种方法:

#include <string>  #include <fstream>  #include <sstream>  std::ifstream t("file.txt");  std::stringstream buffer;  buffer << t.rdbuf();  std::string contents(buffer.str());
#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; 
}  
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;
}
0 0
原创粉丝点击