C++文件读写操作

本文介绍了C++中如何进行文本文件和二进制文件的读写操作,包括使用ofstream和ifstream流对象,以及不同的打开模式如ios::out和ios::binary。对于二进制文件,文章强调了人读不懂但计算机可以解析的特点,并展示了Person类对象的写入与读取示例。
摘要由CSDN通过智能技术生成

目录

一、文本文件

1.写文件基本样式

2.读文件基本样式

二、二进制文件

1.写文件

 2.读文件


一、文本文件

1.写文件基本样式

#include<iostream>
#include<fstream>//包含头文件
using namespace std;
int main() {
	ofstream ofs;//创建流对象

	ofs.open("test.txt",ios::out);//以写方式打开文件“test.txt”

	ofs << "张三" << endl;//写入内容
	ofs << "李四" << endl;

	ofs.close();//关闭文件
	return 0;
}

但可以发现,系统在同级目录下创建了名为test.txt的文件

 因此需要写入文件的绝对路径

ofs.open("C:\\Users\\86177\\Desktop\\test.txt",ios::out);

 这样就可以了,但需要注意的是 表示转义字符,需要改为 \\

打开方式说明

ios::in

只读
ios::out只写
ios::app追加
ios::ate在文件尾打开
ios::trunc如果文件存在,则删除文件再创建新文件
ios::binary以二进制形式打开
|

以多种方式打开文件,如:ios::in | ios::binary 以二进制读方式打开文件

 

  

2.读文件基本样式

	ifstream ofs;//创建流对象
	string file_name = "C:\\Users\\86177\\Desktop\\test.txt";//要操作文件的路径

	ofs.open(file_name,ios::in);//以读方式打开文件“test.txt”

	if (!ofs.is_open()) {//判断文件是否成功打开
		cerr << "文件" << file_name << "打开失败";
		return 0;
	}

 读取数据保存方式:

方式1:

char buf[1024];
	while (ofs >> buf) {//将ofs读取的数据写入buf,直到遇到换行符或文件末尾,则会返回false
		cout << buf << endl;//测验
	}         

方式2:

while (ofs.getline(buf, sizeof(buf))) {//读到换行符返回false
		cout << buf << endl;
	}

方式3:

string buf;//用字符串类型接受
	while (ofs.getline(buf, sizeof(buf))) {//读到换行符返回false
		cout << buf << endl;
	}

方式4:

char ch = 0;
	while ((ch = ofs.get()) != EOF) {//一次读取一个字符
		cout << ch;
	}

二、二进制文件

1.写文件

	ofstream ofs;//创建流对象

	string file_name = "C:\\Users\\86177\\Desktop\\test.txt";//要操作文件的路径

	ofs.open(file_name, ios::out | ios::binary);//以二进制写方式打开文件“test.txt”

	if (!ofs.is_open()) {//判断文件是否成功打开
		cerr << "文件" << file_name << "打开失败";
		return 0;
	}

	Person p("张三", 23);
	ofs.write((const char*)&p, sizeof(Person));//写入数据

	ofs.close();//关闭文件

 代码中的Person类:

class Person {
public:
	string name;
	int age;

	Person() {

	}

	Person(string name, int age) {
		this->name = name;
		this->age = age;
	}
};

 结果:

发现是乱码 

 

 2.读文件

	ifstream ifs;//创建文件流对象

	ifs.open(file_name, ios::in | ios::binary);//以二进制读方式打开文件

	if (!ifs.is_open()) {
		cerr << "文件" << file_name << "打开错误" << endl;
		return 0;
	}

	Person p2;
	ifs.read((char*)&p2, sizeof(Person));//读取数据

	cout << "p2.name=" << p2.name << " p2.age=" << p2.age << endl;

	ifs.close();

 运行结果:

总结:虽然二进制文件人读不懂,但计算机可以将之转化为对应的数据 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值