C++中对文件的操作

对文件的操作

学C的时候我们就接触过如何读写文件,C++中存在C++风格的文件读写,同时也支持C风格的读写文件.
这是IO类库的基本结构,箭头表示该类从何处继承.
在这里插入图片描述
文件的打开模式标记代表了文件的使用方式,这些标记可以单独使用,也可以组合使用,组合使用时,用|将其连接

模式标记适用对象作用
ios::inifstream、fstream打开文件用于读取数据。如果文件不存在,则打开出错。
ios::outofstream、fstream打开文件用于写入数据。如果文件不存在,则新建该文件;如果文件原来就存在,则打开时清除原来的内容。
ios::appofstream、fstream打开文件,用于在其尾部添加数据。如果文件不存在,则新建该文件。
ios::ateifstream打开一个已有的文件,并将文件读指针指向文件末尾(读写指 的概念后面解释)。如果文件不存在,则打开出错。
ios:: truncofstream单独使用时与 ios:: out 相同。连用时,如果文件本来就存在,则打开时清除原来的内容;如果文件不存在,则新建该文件。
ios::binaryifstream、ofstream、fstream以二进制方式打开文件。若不指定此模式,则以文本模式打开。

下面的代码简单地展示了如何读写文本文件,重点为代码内注释.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(void) {
	string name;
	int age;

	ofstream fdata;
	fdata.open("data.txt");//打开文件,如未指定打开方式,默认为ios::out.如果没有该文件,则会新建
	while (1) {
		cout << "请输入昵称:";
		cin >> name;

		if (cin.eof()) {
			break;
		}
		fdata << name << "\t";//用流运算符<<向文件中输入数据

		cout << "年龄:";
		cin >> age;
		fdata << age << "\n";//输入数据
	}
	fdata.close();//一定记得关闭文件

	ifstream fread;
	fread.open("data.txt");//打开文件,如未指定打开方式,默认为ios::in
	while (1) {
		fread >> name;//用流运算符>>从文件中读取数据到变量
		if (fread.eof()) {
			break;
		}
		fread >> age;//读取数据

		cout << name << "\t" << age << endl;
	}
	fread.close();//关闭文件

	system("pause");
	return 0;
}

在这里插入图片描述
data.txt文件的内容:
在这里插入图片描述
二进制文件的简单操作如下,基本的操作和读写文本文件一样:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(void) {
	string name;
	int age;
	ofstream fdata;
	fdata.open("data.dat", ios::binary | ios::out | ios::trunc);

	while (1) {
		cout << "请输入昵称:";
		cin >> name;

		if (cin.eof()) {
			break;
		}
		fdata << name << "\t";

		cout << "年龄:";
		cin >> age;

		//write(const unsigned char *buf,int num);
		//从buf 指向的缓存写 num 个字符到文件中
		fdata.write((char*)&age, sizeof(age));
		fdata << "\n";
	}
	fdata.close();

	system("pause");
	return 0;
}

在这里插入图片描述
data.dat文件内容,可以看到是乱码
在这里插入图片描述
用二进制方式打开
前四个是中文的存储,09是水平制表符(\t),14 00 00 00是输入的年龄(16进制),转化成10进制就是1*16+4=20,和输入的数据相同,0e是回车(\n).后面一个数据分析同上
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值