zoukankan      html  css  js  c++  java
  • C++ 文件读取

    C++文件读写总结

    输入输出流类

    • 依赖头文件 fstream
    • fstream 可以定义输入输出流对象,既可以输出也可以输入
    • ifstream 定义输入流对象
    • ofstream 定义输出流对象
    //定义方式有两种:
    fstream ioFile("file_address",_openmode);
    
    fstream ioFile;
    ioFile.open("file_address",_openmode);
    
    //最后都要close掉
    ioFile.close()
    

    输入输出流类定义的函数

    open()函数

    void open(const char* __s, openmode __mode) //第一个参数为文件路径,第二个参数为打开方式
    

    打开方式有如下这些方式:

    • ios::in 为输入(读)而打开文件
    • ios::out 为输出(写)而打开文件
    • ios::ate 初始位置:文件尾
    • ios::app 所有输出附加在文件末尾
    • ios::trunc 如果文件已存在则先清空该文件
    • ios::binary 二进制方式

    三种输入输出流有各自默认的打开方式openmode:

    • ofstream ios::out | ios::trunc
    • ifstream ios::in
    • fstream ios::in | ios::out

    close()函数

    void close (); //相当于释放输入输出流内部指针,关闭后可以用于其他文件的操作
    

    利用输入输出流对象读写文件

    // 定义的输入输出流对象和cin cout类似,只是输入输出对象不再是屏幕
    ioFile >> c; //读取文件的信息,传入c变量
    ioFile << c; //将c变量的值写入文件
    

    状态标志符的运用

    • bad() 读写出错时候返回true, 例如写入一个只读文件,或者缓存区不足时
    • fail() 格式错误时候会返回true,bad()也会返回true
    • eof() 当读文件到达文件末尾时会返回true
    • good() 当上面值均为false时,返回true

    这些量相当于输入输出流对象的状态属性,可用函数方式来被调用

    输入输出流对象的流指针位置

    • tellg() 和 tellp() //用来得到流指针位置

      这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get流指针的位置 (用tellg) 或 put流指针的位置(用tellp).

    • seekg() 和seekp() //用来改变流指针位置

      这对函数分别用来改变流指针get 和put的位置。

    seekg ( off_type offset, seekdir direction ); //最后的位置 = direction + offset
    seekp ( off_type offset, seekdir direction );
    //seekg 为输入流对象调用的函数, seekp为输出流调用的函数,分别修改get指针和put指针
    

    direction可选有三个:

    • ios::beg 从流开始位置计算的位移
    • ios::cur 从流指针当前位置开始计算的位移
    • ios::end 从流末尾处开始计算的位移

    PS: 输入输出流对象每次读写单位为字节byte,offset也是偏移offset个字节,一个字节按8位(bit)算。

    二进制文件的读写

    1. put()

    用法: ioFile.put(_ch) //写入(一个字节)_ch

    1. get()

    用法: ioFile.get(ch) //读一个字节将其保存在ch变量中
    另外get函数内部参数可以调整

      template<typename _CharT, typename _Traits> get(char_type* __s, streamsize __n, char_type __delim)
    
    
    1. 读写二进制数据块,使用成员函数read()和write()函数,

    用法:

     ioFile.write( (unsigned char*)_struct_obj , sizeof(_struct));
     ioFile.read((unsigned char*)_struct_obj , sizeof(_struct));
     ioFile.gcount() //返回读的字节数
     ioFile.pcount() //返回写的字节数
    

    实例

    data.in文件

    12,1,Tom
    14,0,Sara
    12,1,Jack
    18,0,Kate
    

    代码:

    #include<fstream>
    #include<iostream>
    
    using namespace std;
    int main()
    {
        ifstream inFile("data/data.in",ios::in); //默认的打开方式就是ios::in
        ofstream outFile("data/data.o", ios::trunc | ios::out );
        char buf[10];
        int cnt;
        char s[11];
        while(!inFile.eof())
        {
            inFile.read(buf,sizeof(buf)); //一次最多读取10个字节
            cnt = inFile.gcount(); //看输入流最终读取了几个字节
            outFile.write(buf,sizeof (cnt));
            for (int i = 0; i < cnt; ++i) {
                printf("%c",buf[i]);
            }
        }
        printf("
    ");
        inFile.close();
        outFile.close();
        return 0;
    }
    

  • 相关阅读:
    每天一个Linux命令(10)--cat命令
    每天一个Linux命令(09)--touch命令
    每天一个Linux命令(08)--cp命令
    每天一个Linux命令(07)--mv命令
    CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)
    iptables配置服务器端口转发
    AD管理命令
    win7登入使用的是临时档案解决方法
    修复Dll文件
    iptables 用法
  • 原文地址:https://www.cnblogs.com/raiuny/p/15000058.html
Copyright © 2011-2022 走看看