当前位置:网站首页>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函数,以二进制方式读数据
边栏推荐
- Network security - virus
- [camera topic] how to save OTP data in user-defined nodes
- Startup mode and scope builder of collaboration in kotlin
- Leetcode (540) -- a single element in an ordered array
- 转载收录6.5大侠写的部分Qt开发经验
- 全链路数字化转型下,零售企业如何打开第二增长曲线
- Detailed introduction to the deployment and usage of the Nacos registry
- 苏世民:25条工作和生活原则
- Storage basic operation
- 返回一个树形结构数据
猜你喜欢

树形结构数据的处理

Detailed introduction to the usage of Nacos configuration center

Learn BeanShell before you dare to say you know JMeter
![[fluent] hero animation (hero animation use process | create hero animation core components | create source page | create destination page | page Jump)](/img/68/65b8c0530cfdc92ba4f583b0162544.gif)
[fluent] hero animation (hero animation use process | create hero animation core components | create source page | create destination page | page Jump)

What are the differences between software testers with a monthly salary of 7K and 25K? Leaders look up to you when they master it

In 2022, 95% of the three most common misunderstandings in software testing were recruited. Are you that 5%?

8 free, HD, copyright free video material download websites are recommended

Introduce in detail how to communicate with Huawei cloud IOT through mqtt protocol

Everything file search tool

LabVIEW安装第三方VISA软件后NI VISA失效
随机推荐
Machine learning notes (constantly updating...)
DDL basic operation
使用Go语言实现try{}catch{}finally
Comment communiquer avec Huawei Cloud IOT via le Protocole mqtt
Where is the future of test engineers? Confused to see
[leetcode] 797 and 1189 (basis of graph theory)
DQL basic operation
Network security - the simplest virus
机器学习流程与方法
Socket programming
小程序开发黑马购物商城中遇到的问题
Wechat applet Development Tool Post net:: Err Proxy Connexion Problèmes d'agent défectueux
[Yu Yue education] reference materials of love psychology of China University of mining and technology
[camera topic] turn a drive to light up the camera
Problems encountered in small program development of dark horse shopping mall
[Yu Yue education] Jiujiang University material analysis and testing technology reference
stm32F407-------IIC通讯协议
Explore the conversion between PX pixels and Pt pounds, mm and MM
Iptables layer 4 forwarding
微信小程序開發工具 POST net::ERR_PROXY_CONNECTION_FAILED 代理問題