C++文件操作完全指南:从文本读写到二进制文件处理

文本文件

1.文本文件 ASCII码

2,二进制文件 二进制存

操作文件三大类

1.ofstream写操作

2.ifstream读文件

3.fstream 读写文件

写文件

1.#include <fstream

2.创建流对象

ofstream ofs;

3.打开文件

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

4.写数据

ofs<<"写入的数据";

5.关闭文件

ofs.close();

文件打开方式

ios::in 以只读方式打开文件(只能读,不能写)

ios::out 以只写方式打开文件→ 会清空原有内容

ios::app 以追加方式写文件→ 不会清空,写在文件末尾

ios::ate 打开文件后,定位到文件末尾(但可以修改前面内容)

ios::trunc 打开时清空文件内容(默认和 out 一起生效)

ios::binary 以二进制模式打开(不做文本转换)

javascript 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
using namespace std;
void test01(){
	//1.包含头文件
	//2.创建流对象
	ofstream ofs;
	//3.指定打开方式
	ofs.open("test.txt", ios::out);
	//4.写内容
	ofs << "姓名:张三" << endl;
	ofs << "年龄:18" << endl;
	ofs << "性别:男" << endl;
	//5.关闭
	ofs.close();
}
int main() {
	test01();
}

读文件

1.包含头文件

#include<fstream

2.创建流对象

ifstream ifs;

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

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

4.读数据

四种方式读取

5.关闭文件

ifs.close()

javascript 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void test01(){
	//1.包含头文件
	//2.创建流对象
	ifstream ifs;
	//3.打开文件 并且判断是否打开成功
	ifs.open("test.txt", ios::in);

	if (!ifs.is_open()) {
		cout << "文件打开失败" << endl;
		return;
	}
	//4.读数据
	//第一种
	 char buf[1024] = { 0 };
	while (ifs >> buf) {
		cout << buf << endl;
	}
	//第二种
	char buf[1024] = { 0 };
	while (ifs.getline(buf, sizeof(buf))) {
		cout << buf << endl;
	}
	//第三种
	string buf;
	while (getline(ifs, buf)) {
		cout << buf << endl;
		//getline结束会返回false或者EOF
	}
	//第四种
	char c;
	while ((c = ifs.get()) != EOF) {
		cout << c;
	}

	//5.关闭文件
	ifs.close();
}
int main() {
	test01();
}

用二进制写文件

javascript 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class person {
public:
	char m_name[100];
	int m_age;
};
void test01(){
	ofstream ofs;
	ofs.open("text.txt", ios::out | ios::binary);
	person p = { "张三",18 };
	ofs.write((const char*)&p, sizeof(p));
	ofs.close();

}
int main() {
	test01();
}

用二进制读文件

javascript 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class person {
public:
	char m_name[100];
	int m_age;
};
void test01(){
	ifstream ifs;
	ifs.open("test.txt", ios::in | ios::binary);
	if (!ifs.is_open()) {
		cout << "文件打开失败" << endl;
		return;
	}
	person p;
	ifs.read((char*)&p, sizeof(person));
	cout << "姓名" << p.m_name << endl;
	cout << "年龄" << p.m_age << endl;
	ifs.close();
}
int main() {
	test01();
}
相关推荐
techdashen13 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
C137的本贾尼14 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
玖玥拾14 小时前
C++ 数据结构 八大基础排序算法专题
数据结构·c++·算法·排序算法
YYYing.14 小时前
【C++大型项目之高性能服务器框架 (七) 】Socket与ByteArray模块
服务器·c++·后端·框架·高性能·c/c++
从零开始的代码生活_14 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list
hy.z_77715 小时前
【C语言】11. 深入理解指针1
c语言·开发语言
charlie11451419115 小时前
现代C++工程实践——WeakPtr 第二关:核心骨架与控制块
开发语言·c++
2401_8697695915 小时前
内容9 string 1
c++
ttwuai16 小时前
Go 后台接口 401/403 排查:JWT 过期、刷新请求和权限码怎么定位
开发语言·golang·状态模式
漫随流水16 小时前
Java——springboot web案例
java·开发语言·spring boot