C++ 文件I/O流

C++文件的I/O流
一、c++对文本文件的读写
a.创建流对象,通过流对象打开文件
ofstream ofs(const char* filename,openmode mode);
b.通过成员函数方式,打开文件
void open(const char* filename);
void open(const char* filename,openmode mode);
filename :文件的路径
mode :打开方式
    ios::app 添加输出
    ios::ate 当已打开时寻找到EOF
    ios::binary 以二进制模式打开文件
    iOS::in 为读取打开文件
    ios::out 为写入打开文件
    ios::trunc 覆盖存在的文件
    
ifstream类,默认以只读方式O_RDONLY打开文件,文件不存在则失败"r"
ifstream类,默认以只写方式O_RDONLY|O_CREAT|O_TRUNC打开文件,文件不存在则创建、存在则清空"w"
fstream类,默认以读写方式O_RDWR打开文件,文件不存在则失败,文件存在不清空"r+"
    
 注意:ios::里面打开模式单独使用和混合使用时候有些功能会有所删减变化,不是简单的功能相加,具体底层调用哪个打开模式可以通过strace ./a.out 来追踪底层对系统函数的调用
二、如何判断文件是否打开成功
a、通过!流对象名 执行了该类的!运算符重载版本
    if(!ifs) //为真,则文件打开失败
b、通过good\fail成员函数判断是否打开成功
    bool good();
    功能:判断上一次流是否成功,成功返回真,一般用于判断文件是否打开成功
三、读写文件

流对象 << 写操作

流对象 >> 读操作

对类对象操作符<< >>进行重载

class Student
{
	string name;
	int age;
	char sex;
	float score;
public:
    Student(const string& name,int age,char sex,float score):name(name),age(age),sex(sex),score(score){}	
	const string& getName(void) const
	{
		return name;
	}
	const int getAge(void) const
	{
		return age;
	}	
	const char getSex(void) const
	{
		return sex;
	}
	const float getScore(void) const
	{
		return score;
	}
	friend ostream& operator<<(ostream& os,const Student& stu)
	{
		return os<<stu.getName()<<" "<<stu.getAge()<<" "<<stu.getSex()<<" "<<stu.getScore()<<endl;
	}
	friend istream& operator>>(istream& is,Student& stu)
	{
		return is>>stu.name>>stu.age>>stu.sex>>stu.score;	
	}
}
四、关闭文件
成员函数:
    void close(void)
    注意:只是关闭流对象当前的文件,但是流对象没有销毁,还可以继续通过open成员函数重新打开别的文件

如何以文本方式读写类对象?

读写类对象时绝大部分成员变量都是私有的,因此无法直接在类外进行读写
由于ostream/istream分别是ofstream/ifstream的父类,因此如果重载了>> <<运算符,既可以用于平时输出、输入类催下,并且还可以直接用于类对象的文本方式流操作读写
    cout<<类对象
    cin>>类对象    重载后
    ofs<<类对象
    cin>>类对象    成立
五、c++的随机读写

c++为文件IO提供了俩套设置位置指针的成员函数,为了兼容一些有俩个位置指针的操作系统,但是UNIX、Linux、Windows系统底层只有一个文件位置指针,所以使用哪一套都没有区别

istream& seekg(off_type offset,ios::seekdir origin);
功能:通过 偏移量+基础位置 设置位置指针的位置
    offset:偏移量
    origin:基础位置
        ios::beg    文件开头
        iOS::cur    当前位置
        ios::end    文件末尾
istream& seekg(pos_type position);
功能:通过绝对值的方式设置位置指针的位置
seekp类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值