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;
    }
  • 相关阅读:
    POJ 2184 Cow Exhibition (01背包变形)(或者搜索)
    ACM-ICPC如何起步[转]
    查看centos中的用户和用户组和修改密码
    CentOS7安装并配置PostgreSQL
    在Win10下,python3和python2同时安装并解决pip共存问题
    Django-用户-组-权限
    linux系统磁盘满了,怎么解决?
    DRF (Django REST framework) 中的路由Routers
    DRF (Django REST framework) 中的视图扩展类
    DRF (Django REST framework) 中的视图类
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2488825.html
Copyright © 2011-2022 走看看