istream 读文件的几种方式,函数用法

C++语言 专栏收录该内容
22 篇文章 0 订阅

1:getline方式
2:seekg->read 方式
3:循环read方式
//循环read方式时如果在还未读入 MAX_FILE_LEN 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;

    const int MAX_FILE_LEN = 1024;
    char rootdir[MAX_FILE_LEN] ={0};
    ::GetCurrentDirectoryA(MAX_PATH,rootdir);
    strcat(rootdir,("\\文字.txt"));

    string mail_body = "";
    string mail_bodyT = "";
    string mail_bodyF = "";
    ifstream ifs(rootdir, ios::in | ios::binary);
    if ( ifs.is_open() )
    {   
        //getline方式
        string strLine = "";
        while(std::getline(ifs,strLine))
        {
            mail_body += strLine;
        }


        //seekg->read 方式
        ifs.seekg(0, ios::end); 
        int length = ifs.tellg();
        ifs.seekg(0, ios::beg);
        char * buffer = new char [length];
        ifs.read (buffer,length);
        mail_bodyT = buffer;

        //循环read方式
        int iLen = 0;
        char fileBuff[MAX_FILE_LEN];
        memset(fileBuff, 0, MAX_FILE_LEN*sizeof(char));
        while (ifs.read(fileBuff, MAX_FILE_LEN))  //判断的读取后ifs.good()
        {
            mail_bodyF += fileBuff;
            iLen += ifs.gcount();
            memset(fileBuff, 0, MAX_FILE_LEN*sizeof(char));
        }
        mail_bodyF += fileBuff; //剩余的ifs.gcount()个字符
        iLen += ifs.gcount();   //这里的iLen应该跟前面的length是等值的

        ifs.close();
    }

补充:seekg() 和tellg()的函数用法

    seekg()函数
    istream& seekg(streampos pos);
    istream& seekg(streamoff off, ios_base::seekdir way);
    /*
    用法1设置输入流指针相对于开始的绝对位置 
      其实就相当于 seekg(streampos pos, ios::beg);
      pos是一个非负整数。
    用法2设置输入流指针相对于基地址的位置, 基地址可以是[ios::beg,ios::end,ios::cur]
      参数off是偏移值,参数way是基地址的类型。 
      其中offs是有符号整型
    */

    tellg()函数
    streampos tellg(); 
    //返回当前定位指针的位置。上面的示例中它先定位到了ios::end文件结束处,所以返回也就是文件的大小。
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值