当前位置:网站首页>5.文件操作
5.文件操作
2022-07-03 02:05:00 【我想要去航海】
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。
通过文件可以将数据持久化
C++中对文件操作需要包含头文件 < f s t r e a m > <fstream> <fstream>
文件类型分为两种:
- 文本文件:文件以文本的ASCII码形式存储在计算机中
- 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。
操作文件的三大类:
- ofstream:写操作
- ifstream:读操作
- fstream:读写操作
5.1 文本文件
5.1.1 写文件
写文件步骤如下:
- 包含头文件 #include < f s t r e a m > <fstream> <fstream>
- 创建流对象 ofstream ofs;
- 打开文件 ofs.open(“文件路径”,打开方式);
- 写数据 ofs<<“写入的数据”;
- 关闭文件 ofs.close();
文件打开方式:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初识位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注意:文件打开方式可以配合使用,利用|操作符
例如:用二进制方式写文件:ios::binary | ios::out
#include<iostream>
using namespace std;
#include<fstream> // 头文件包含
// 文本文件 写文件
void test01()
{
// 1. 包含头文件 fstream
// 2. 创建流对象
ofstream ofs;
// 3. 指定打开方式
ofs.open("test.txt", ios::out);
// 4. 写内容
ofs << "姓名:张三" <<endl;
ofs << "性别:男" <<endl;
ofs << "年龄:18" <<endl;
// 5. 关闭文件
ofs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
总结:
- 文件操作必须包含头文件fstream
- 读文件可以利用ofstream,或者fstream类
- 打开文件时候需要指定操作文件的路径,以及打开方式
- 利用<<可以向文件中写数据
- 操作完毕,要关闭文件
5.1.2 读文件
读文件与写文件步骤相似,但是读取方式相对比较多
读文件步骤如下:
- 包含头文件 #include < f s t r e a m > <fstream> <fstream>
- 创建流对象 ifstream ifs;
- 打开文件并判断文件是否打开成功 ifs.open(“文件路径”,打开方式);
- 读数据 四种读取方式
- 关闭文件 ifs.close()
示例:
#include<iostream>
using namespace std;
#include<fstream> // 头文件包含
#include<string>
// 文本文件 读文件
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;
//}
// 第四种
char c;
while((c = ifs.get()) != EOF) // EOF end of file
{
cout << c;
}
// 5 关闭文件
ifs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
总结:
- 读文件可以利用ifstream,或者fstream类
- 利用is_open函数可以判断文件是否打开成功
- close关闭文件
5.2 二进制文件
以二进制的方式对文件进行读写操作
打开方式要指定为:ios::binary
5.2.1 写文件
二进制方式写文件主要利用流对象调用成员函数write
函数原型:ostream& write(const char * buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数。
示例:
#include<iostream>
using namespace std;
#include<fstream>
// 二进制文件 写文件
class Person
{
public:
char m_Name[64]; // 姓名
int m_Age; // 年龄
};
void test01()
{
// 1 包含头文件
// 2 创建流对象
ofstream ofs;
// 3 打开文件
ofs.open("person.txt", ios::out | ios::binary);
// 4 写文件
Person p = {
"张三", 18};
ofs.write((const char *)&p, sizeof(Person));
// 5 关闭文件
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
总结:
文件输出流对象 可以通过write函数,以二进制方式写数据
5.2.2 读文件
二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数。
示例:
#include<iostream>
using namespace std;
#include<fstream>
class Person
{
public:
char m_Name[64]; // 姓名
int m_Age; // 年龄
};
// 二进制文件 读文件
void test01()
{
// 1 包含头文件
// 2 创建流对象
ifstream ifs;
// 3 打开文件 判断文件是否打开成功
ifs.open("person.txt", ios::in | ios::binary);
if(!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
// 4 读文件
Person p;
ifs.read((char *)&p, sizeof(Person));
cout << "姓名:" << p.m_Name << " 年龄: " << p.m_Age << endl;
// 5 关闭文件
ifs.close();
}
int main() {
test01();
system("pause");
return 0;
}
文件输入流对象 可以通过readh函数,以二进制方式读数据
边栏推荐
- stm32F407-------ADC
- [Flutter] dart: class;abstract class;factory;类、抽象类、工厂构造函数
- 2022 financial product revenue ranking
- 502 (bad gateway) causes and Solutions
- Startup mode and scope builder of collaboration in kotlin
- [shutter] top navigation bar implementation (scaffold | defaulttabcontroller | tabbar | tab | tabbarview)
- The technology boss is ready, and the topic of position C is up to you
- Network security - scanning and password explosion 2
- Everything file search tool
- Visual yolov5 format data set (labelme JSON file)
猜你喜欢
[Flutter] dart: class;abstract class;factory;类、抽象类、工厂构造函数
[shutter] hero animation (hero realizes radial animation | hero component createrecttween setting)
Detailed introduction to the deployment and usage of the Nacos registry
[shutter] shutter debugging (debugging fallback function | debug method of viewing variables in debugging | console information)
返回一个树形结构数据
机器学习笔记(持续更新中。。。)
elastic stack
查询商品案例-页面渲染数据
[shutter] shutter debugging (debugging control related functions | breakpoint management | code operation control)
MySQL学习03
随机推荐
Socket编程
微服务组件Sentinel (Hystrix)详细分析
机器学习笔记(持续更新中。。。)
Kotlin middle process understanding and Practice (II)
[fluent] fluent debugging (debug debugging window | viewing mobile phone log information | setting normal breakpoints | setting expression breakpoints)
Recommendation letter of "listing situation" -- courage is the most valuable
详细些介绍如何通过MQTT协议和华为云物联网进行通信
转载收录6.5大侠写的部分Qt开发经验
小程序開發的部分功能
【Camera专题】HAL层-addChannel和startChannel简析
MySQL学习03
The Sandbox阐释对元宇宙平台的愿景
2022 spring "golden three silver four" job hopping prerequisites: Software Test interview questions (with answers)
Hard core observation 547 large neural network may be beginning to become aware?
DQL basic operation
Where is the future of test engineers? Confused to see
CFdiv2-Fixed Point Guessing-(区间答案二分)
Iptables layer 4 forwarding
His experience in choosing a startup company or a big Internet company may give you some inspiration
[Yu Yue education] Jiujiang University material analysis and testing technology reference