09 黑马笔记之C++进阶语法-文件操作

8.5 C++文件操作

目录

8.5 C++文件操作

8.5.1 文本文件

8.5.2 二进制文件


程序运行时产生的数据都属于临时数据,程序一旦运行结束后都会释放

通过文件可以将数据持久化

C++中对文件操作都需要包含头文件

文件类型分为两种:

1、文本文件:文件以文本的ASCII码形式存储在计算机中

2、二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类:

1、ofstream:写操作(输出到文件中)

2、ifstream:读操作

3、fstream:读写操作

8.5.1 文本文件

8.5.1.1 写文件

写文件步骤如下:

1、包含头文件

#include

2、创建流对象

ofstream ofs;

3、打开文件

ofs.open("文件路径",打开方式);

4、写数据

ofs<<"写入的数据";

5、关闭文件

ofs.close();

文件打开方式:

09 黑马笔记之C++进阶语法-文件操作_第1张图片

注意:文件打开方式可以配合使用,利用 | 操作符

例如:用二进制方式写文件ios;;binary|ios::out

8.5.1.2 读文件

读文件与写文件步骤相似,但是读取方式相对较多

读文件步骤如下:

1、包含头文件

#include

2、创建流对象

ifstream ifs;

3、打开文件并判断文件是否打开成功

ifs.open("文件路径",打开方式);

4、读数据

四种方式读取

5、关闭文件

ifs.close();

#include
#include
#include

using namespace std;

//实验:文本文件处理



void test01() {
    //写文件
    ofstream ofs;
    ofs.open("test.txt", ios::out);
    ofs << "姓名" << endl;
    ofs << "年龄" << endl;
    ofs.close();
    //读文件
    ifstream ifs;
    ifs.open("test.txt", ios::in);
    //判断文件是否打开成功
    if (!ifs.is_open()) {
        cout << "文件打开失败!" << endl;
        return;
    }
    //读文件四种方式
    //1、
    char buf[1024] = { 0 };
    //按行将文件内容放入输入流
    while (ifs>>buf) {
        cout << buf << endl;
    }
    cout << "-----------------------" << endl;
    //2、
    //char buf1[1024] = { 0 };
    利用getline函数将文件内容按行放入buf1
    //while (ifs.getline(buf1, sizeof(buf1))){
    //    cout << buf1 << endl;
    //}
    //cout << "-----------------------" << endl;
    3、
    //string buf2;
    利用全局函数getline(输入流,字符串)
    //while (getline(ifs, buf2)) {
    //    cout << buf2 << endl;
    //}
    //cout << "-----------------------" << endl;
    4、一般不建议用
    //char buf3;
    利用get函数读取逐个字符,并判断不等于文件尾部EOF end of file
    //while ((buf3 = ifs.get()) != EOF) {
    //    cout << buf3 << endl;
    //}
    ifs.close();

}


int main() {
    test01();
    system("pause");
    return 0;
}

注意:如果要测试多种读取方式,需要先读取一次后关闭文件,下一次再先打开文件

8.5.2 二进制文件

以二进制的方式对文件进行读写操作

打开方式要指定为ios::binary

8.5.2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型:ofstream wrtie(const char * buffer,int len);

参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数

8.5.2.2 读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:istream& read(char *buffer,int len);

参数解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数

#include
#include
#include

using namespace std;

//实验:二进制文件处理
//人为看不懂,有乱码,但是读出可以看懂

class person {
public:
    char c[1024];
    int age;
};

void test01() {
    //写二进制文件
    //创建数据
    person p = { "张三",18 };
    ofstream ofs;
    ofs.open("person.txt", ios::out | ios::binary);
    //write传入两个参数,const char*类型地址和长度,&p返回的类型是person *,要强制转换
    ofs.write((const char*)&p, sizeof(person));
    ofs.close();

    //读二进制文件
    //创建要读入的对象
    person p1;
    ifstream ifs;
    ifs.open("person.txt", ios::in | ios::binary);
    //判断文件是否打开成功
    if (!ifs.is_open()) {
        cout << "文件打开失败!" << endl;
        return;
    }
    ifs.read((char*)&p1, sizeof(person));
    cout << "姓名" << p1.c << "年龄" << p1.age << endl;
    ifs.close();

}


int main() {
    test01();
    system("pause");
    return 0;
}

你可能感兴趣的:(C++语法入门,笔记,c++,开发语言)