C++核心编程 5 文件操作
5.1 文本文件
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化。C++中对文件操作需要包含头文件<fstream>
文件类型分为两种:
1、文本文件: 文件以文本的ASCII码形式存储在计算机中;
2、二进制文件: 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们;
操作文件的三大类:
1、ofstream:写操作
2、ifstream:读操作
3、fstream:读写操作
5.1.1 写文件
写文件步骤如下:
1、包含头文件
#include<fstream>
2、创建流对象
ofstream ofs;
3、打开文件
ofs.open("文件路径",打开方式);
4、写数据
ofs << "写入的数据";
5、关闭文件
ofs.close();
#include<iostream> #include<string> using namespace std; #include<fstream>//头文件包含 //文本文件 写文件 void test1() { //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() { test1(); system("pause"); return 0; }
总结:
1、文件操作必须包含头文件fstream;
2、读文件可以利用ofstream,或fstream类;
3、打开文件时候需要指定操作文件路径,以及打开方式;
4、利用 << 可以向文件中写数据;
5、操作完毕,要关闭文件;
5.1.2 读文件
读文件步骤如下:
1、包含头文件
#include<fstream>
2、创建流对象
ifstream ifs;
3、打开文件
ifs.open("文件路径",打开方式);
4、读数据
四种读取方式
5、关闭文件
ifs.close();
#include<iostream> #include<string> using namespace std; #include<fstream>//头文件包含 //文本文件 读文件 void test1() { //1、包含头文件fstream //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 ) //将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() { test1(); system("pause"); return 0; }
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 test1() { //1、包含头文件 //2、创建流对象 ofstream ofs; // 不想写第三步 可以这样写ofstream ofs("person.txt", ios::out | ios::binary);两步合为一步; //3、打开文件 ofs.open("person.txt", ios::out | ios::binary); //4、打开方式 Person p = { "张三",18 }; ofs.write((const char*)&p, sizeof(Person)); //&p 对p取地址,然后强转为(const char*),因为.write()第一个参数类型为const char* //5、关闭文件 ofs.close(); } int main() { test1(); system("pause"); return 0; }
总结:文件输出流对象可以通过write函数,以二进制的方式写数据
5.2.2 读文件
二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer,int len);
参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数
#include<iostream> #include<string> using namespace std; #include<fstream>//头文件包含 //二进制文件 读文件 class Person { public: char m_Name[64]; //姓名 int m_Age; //年龄 }; void test1() { //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() { test1(); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具