zoukankan      html  css  js  c++  java
  • 一次性将整个文件读取到string变量中

    目前搜到几个版本:

    直接只用linux提供的接口:

    可以直接使用linux提供的接口函数,access判断存取权限,用stat获得文件长度然后读取相应文件

    使用c++提供的接口:

    ifstream,和istreambuf_iterator这两个函数

    ifstream,std::stringstream和rdbuf


        string       m_InputFileName;       //输入文件绝对路径
        string       m_InputData;           //输入文件的内容
        ifstream   m_InputFile;           //输入文件对象   

        //文本方式
        m_InputFile.open(m_InputFileName.c_str());
        //或者二进制方式
        //m_InputFile.open(m_InputFileName.c_str(), ios_base::binary);
       
        //把输入文件的内容全部写入m_InputData
        m_InputData.clear();//清除原有数据
        copy(istreambuf_iterator<char>(m_InputFile), istreambuf_iterator<char>(),
            back_inserter(m_InputData));


        m_InputFile.close();

    或者《Effective STL》的源用法:
    ifstream inputFile("interestingData.txt");
    string fileData((istreambuf_iterator<char>(inputFile)),
            istreambuf_iterator<char>());

    ifstream in("readme.txt", ios::in);
     istreambuf_iterator<char> beg(in), end;
     string strdata(beg, end);
     in.close();

    使用4行代码,即可将readme.txt的全部内容读取至字符串对象strdata中。

      1. string read(const char* filename)  
      2. {  
      3.     ifstream file(filename);   
      4.     string content = "";  
      5.     if (file)   
      6.     {   
      7.         std::stringstream buffer;   
      8.         buffer << file.rdbuf();   
      9.         content = buffer.str();  
      10.     }   
      11.     file.close();   
      12.     return content;  

    参考《Effective STL》条款5和条款6,我重写为以下函数:


    bool readTheWholeFile(const char* fn, std::vector<char>& data)
    {
    std::ifstream file(fn, std::ios_base::in | std::ios_base::binary);
    if ( !file ) return false;
    std::istreambuf_iterator<char> dataBegin(file);
    std::istreambuf_iterator<char> dataEnd;
    data.assign(dataBegin, dataEnd);
    file.close();
    return true;
    }
  • 相关阅读:
    一个人的旅行 dij(),评测的时候有点惨
    CodeFroce Round 340 div2 E XOR and Favorite Number【莫队算法】
    [HihoCoder-1185] 连通性·三 【tarjan+缩点】
    2017百度之星初赛(A)1001,1005,1006解题报告
    HDU 5961&AOJ 821 传递
    pair
    优先队列 priority_queue
    ccf 201903-5
    memset 和 fill 的区别
    ccf 20190302
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2488825.html
Copyright © 2011-2022 走看看