自学内容网 自学内容网

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类似


原文地址:https://blog.csdn.net/xjl1849395627/article/details/142590220

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!