C/C++ 文件读写操作

1.文件写操作

可参考 文件写操作

2.文件读操作

采用标准库里面的read();
函数原型:

istream& read (char* s, streamsize n);

s为文件名,n为要读取的字节长度。

几个常用的成员函数:

(1). stream& seekg (streamoff off, ios_base::seekdir way)
(2) 第二个参数有以下几种选择
ios_base::beg 数据流的头
ios_base::cur 数据流的当前位置
ios_base::end 数据流的尾
例如:
in.seekg(0, in.end); //追溯到流的尾部,ios::end是代表流的结尾,0代表偏移量。
in.seekg(0, ios::end); //意思是直接跳到当前流的结尾,略过流内的所有数据。
int length = in.tellg(); //获取流的长度
in.seekg(0, in.beg); // 追溯到流的开始,ios::beg是代表流的开始,0代表偏移量。从文件的开头位置开始,移动 0 字节,实际上就是指移动到文件开头
in.seekg(_size, in.cur);//追溯到流的当前位置,从当前位置开始,跳过_size个字节,下次就从这个位置开始读,正负代表左偏右偏

 {
     char ch[50] = { 0 };
     int iReadlen;
     ifstream infile("test.txt", ios::binary);
     if (!infile)
     {
          cerr << "open error!" << endl;
          exit(1);
     }
                
    //统计长度,同时使用者三个
    infile.seekg(0, infile.end);
    int len = infile.tellg();
    infile.seekg(0, infile.beg);
    infile.read(ch, 5);//读五个字节
    iReadlen = infile.gcount();
    infile.seekg(2, infile.cur); //跳过两个字节
    infile.read(ch,9);//读9个字节
    iReadlen = infile.gcount();
    infile.close();
}

(3).streamsize gcount() const; 当前读取字节数
(4)如果read()读取异常,需要对 标准IO库定义的条件状态进行重新设置,常见的条件状态有:

常量含义fail标志位oef标志位bad标志位
ios::badbit已达到文件结束001
ios::eofbit输入(输出)流出现非致命错误,可挽回010
ios::failbit输入(输出)流出现致命错误,不可挽回100
ios::goodbit流状态完全正常000

s.clear() 将流s中的所有状态值都重设为有效状态。
s.clear(flag) 将流s中的某个指定条件状态置为有效,flagstrm::iostate类型的条件状态,若括号内不写具体条件状态则将所有条件状态全部设置有效。

if (VideoFile.read(m_pBuffer, MEMERY_1M))
        {
            int iBegPos = ForwardGetGroup(0, MEMERY_1M);
            int iEndPos = BackwardGetGroup(MEMERY_1M - 1, 0);

            //修改1M内的起始帧位置
            UpdateFrameNum(iBegPos, iEndPos);
        }
        else
        {
            int iBegPos = ForwardGetGroup(0, VideoFile.gcount());
            int iEndPos = BackwardGetGroup(VideoFile.gcount() - 1, 0);
            UpdateFrameNum(iBegPos, iEndPos);
            VideoFile.clear(ios::eofbit); //将eofbit设置为有效
            //VideoFile.clear();
            VideoFile.seekg(FILE_HEADER_SIZE, VideoFile.beg);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WJsuperrunner

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值