C++ 文件读取
2021/7/12 1:12:35
本文主要是介绍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)算。
二进制文件的读写
- put()
用法: ioFile.put(_ch) //写入(一个字节)_ch
- get()
用法: ioFile.get(ch) //读一个字节将其保存在ch变量中
另外get函数内部参数可以调整
template<typename _CharT, typename _Traits> get(char_type* __s, streamsize __n, char_type __delim)
- 读写二进制数据块,使用成员函数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("\n"); inFile.close(); outFile.close(); return 0; }
这篇关于C++ 文件读取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版