C++ 文件IO实现

        目录

1、文件打开 / 关闭 

(1) 打开文件

(2) 关闭文件

2、二进制读写(read / write)

(1)  write函数

(2) read 函数

3、文本读写

(1) 写操作

(2) 读操作


C语言使用 fread / fwrite 函数来实现二进制读写,使用 fgetc /fputc / fgets / fputs 实现文本/字符串的读写。值得注意的是二进制读写不需要分隔符,文本/字符串的读写需要有分隔符,否则读取的时候会因为找不到分隔符而达不到想要的效果。

C++也有对应的读写类(ifstream / ofstream)来让我们达到读写文件的目的,二进制读写使用的是 read / write,文本的读写使用的是 流提取(>>) 和 流插入(<<)

1、文件打开 / 关闭 

(1) 打开文件

C++打开文件的方式并不是通过调用函数的方式,而是调用构造函数的方式来打开文件。

读形式打开:

// 文本的形式读: 
ifstream ifs("文件路径");
// 二进制的形式读:
ifstream ifs("文件路径", ifstream::in | ifstream::binary);

写形式打开:

// 文本的形式读: 
ifstream ofs("文件路径");
// 二进制的形式读:
ofstream ofs("文件路径", ofstream::out|ofstream::binary);

(2) 关闭文件

关闭文件的话,可以主动调用 close 函数,也可以在销毁对象时自动调用析构函数。

2、二进制读写(read / write)

虽说是二进制读写,即便是普通的文本读写也是支持的,只不过使用流插入/流提取进行文本读写更加方便。这里使用的头文件是 fstream

(1)  write函数

函数声明如下:

第一个参数:要写入的数据(如果不是char*类型,需要强转成char*类型)

第二个参数:数据所占字节数

返回值:返回一个输出流对象的引用(一般不考虑返回值)

ofstream ofs("D:\\data.txt", ofstream::out | ofstream::binary);
const char* str = "hello";
ofs.write(str, sizeof(str));
ofs.close();

 

(2) read 函数

函数声明如下:

 第一个参数:数据读取到以后,要存到哪个地址

第二个参数:可以用于存储的空间所占字节数

返回值:返回一个输入流对象的引用(一般不考虑返回值)

ifstream ifs("D:\\data.txt", ifstream::in | ifstream::binary);
char* pstr = new char[5];
ifs.read(pstr, sizeof(pstr));

3、文本读写

文本的读写可以使用 流插入或者流提取来实现更加方便快捷。首先要创建流的对象,然后使用流插入或者流提取来进行读写。

(1) 写操作

ofstream ofs("D:\\data.txt");
ofs << "张三" << " " << 18;   // 文本形式写入的时候,不同数据需要使用空格或者换行隔开
ofs.close();

(2) 读操作

ifstream ifs("D:\\data.txt");
char name[10] = { 0 };
int age;
ifs >> name >> age;    // 读取的时候,根据分隔符判断一个数据是否读取结束
                       //然后继续读取下一个,依次存入变量中
ifs.close();

cout << name << " " << age;

注意:流插入和流提取仅支持内置类型,如果要支持自定义类型,需要重载 流提取和流插入的操作符函数。

流插入操作符 (<<) 重载 —— 实现自定义类型数据的打印_仲夏夜之梦~的博客-优快云博客icon-default.png?t=M85Bhttps://blog.youkuaiyun.com/challenglistic/article/details/127694872?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值