当前位置:网站首页>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函数,以二进制方式读数据
边栏推荐
- Ni visa fails after LabVIEW installs the third-party visa software
- Custom components, using NPM packages, global data sharing, subcontracting
- Analysis, use and extension of open source API gateway apisex
- Storage basic operation
- leetcode961. Find the elements repeated N times in the array with length 2n
- Detailed introduction to the deployment and usage of the Nacos registry
- Visualisation de l'ensemble de données au format yolov5 (fichier labelme json)
- Use go language to realize try{}catch{}finally
- iptables 4层转发
- Performance test | script template sorting, tool sorting and result analysis
猜你喜欢
Anna: Beibei, can you draw?
ByteDance data Lake integration practice based on Hudi
8 free, HD, copyright free video material download websites are recommended
Detailed introduction to the usage of Nacos configuration center
[shutter] hero animation (hero realizes radial animation | hero component createrecttween setting)
小程序開發的部分功能
stm32F407-------DMA
easyPOI
Redis: simple use of redis
Coroutinecontext in kotlin
随机推荐
Network security - Information Collection
Wechat applet Development Tool Post net:: Err Proxy Connexion Problèmes d'agent défectueux
Technology sharing | Frida's powerful ability to realize hook functions
Analyzing several common string library functions in C language
[camera topic] complete analysis of camera dtsi
What are MySQL locks and classifications
力扣(LeetCode)183. 从不订购的客户(2022.07.02)
A 30-year-old software tester, who has been unemployed for 4 months, is confused and doesn't know what to do?
CFdiv2-Fixed Point Guessing-(区间答案二分)
stm32F407-------DMA
转载收录6.5大侠写的部分Qt开发经验
返回一个树形结构数据
Visualisation de l'ensemble de données au format yolov5 (fichier labelme json)
In the face of difficult SQL requirements, HQL is not afraid
What are the differences between software testers with a monthly salary of 7K and 25K? Leaders look up to you when they master it
How to find summer technical internship in junior year? Are you looking for a large company or a small company for technical internship?
Basic operation of view
[shutter] shutter debugging (debugging control related functions | breakpoint management | code operation control)
stm32F407-------IIC通讯协议
机器学习流程与方法