C++中的文件操作是通过使用文件流来实现的。文件流提供了对文件的输入和输出功能。下面是C++文件操作的基本步骤:
1. 包含头文件:首先,包含 `<fstream>` 头文件,它包含了进行文件操作所需的类和函数。
2
. 进行文件读写操作:使用文件流对象的成员函数进行文件读写操作。例如,使用 `getline()` 函数逐行读取文本内容,使用 `<<` 运算符将数据写入文件。
5. 关闭文件:完成文件操作后,使用文件流对象的 `close()` 函数关闭文件。
以上是C++文件操作的基本流程。在实际应用中,还可以使用文件流对象的其他成员函数来操作文件指针、查询文件状态以及处理错误等。
在进行文件操作时,需要注意错误处理和异常处理。可以使用条件语句和异常处理机制来检查和处理文件操作中的错误情况。
通过掌握C++文件操作的基本步骤和注意事项,你可以读取和写入文件,实现数据的持久化和文件的处理。
. 创建文件流对象:使用文件流类的对象来表示要操作的文件。有两种常用的文件流类:`ifstream`(用于读取文件)和 `ofstream`(用于写入文件),还有一个同时支持读写的 `fstream` 类。
3. 打开文件:使用文件流对象的 `open()` 函数打开文件。在打开文件时,需要提供文件名和打开模式参数,打开模式指定了文件的读写方式(读、写、追加等)。
引子:
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化。C++中对文件操作需要包含头文件< fstream > 。
一.基本知识:
1.1文件类型
文件类型分为两种:
1.文本文件–文件以文本的ASCII码形式存储在计算机中。
2二进制文件·文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。
1.2操作文件分类
操作文件的三大类:
1. ifstream:读操作 io对应读写
2.ofstream:写操作
3. fstream :读写操作
1.3文件步骤
1.包含头文件
#include <fstream>2.创建流对象
ofstream ofs;3.打开文件
ofs.open("文件路径",打开方式);4.写数据
ofs <<"写入的数据";5.关闭文件
ofs.close();
1.4文件打开方式
ios.in | 为读文件而打开文件 |
ios:out | 为写文件而打开文件 |
ios:.ate | 初始位置:文件尾 |
ios:.app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注意:文件打开方式可以配合使用,利用|操作符例如:用二进制方式写文件ios::binary |ios: : out
写文件代码实例:
#include <iostream>
#include <fstream>
using namespace std;
void fun() {//1.头文件//2.创建流对象fstream ofs;//3.指定打开方式ofs.open("test.txt", ios::out);//4.写内容ofs << "姓名:张三" << endl;ofs << "性别:男" << endl;//5.关闭文件ofs.close();
}
int main() {fun();return 0;
}
写文件可以用ofstream或 fstream
读文件代码实例:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void fun() {//1.头文件//2.创建流对象fstream ofs;//3.指定打开方式ofs.open("test.txt", ios::out);//4.写内容ofs << "姓名:张三" << endl;ofs << "性别:男" << endl;//5.关闭文件ofs.close();
}void fun1() {ifstream ofs;ofs.open("test.txt", ios::in);//ofs.is_open()打开失败返回falseif (!ofs.is_open()) {cout << "文件打开失败" << endl;}//读数据// //第一种char buf[1024] = { 0 };//ofs按行输入到buf中,每次循环覆盖上一次while (ofs >> buf) {cout << buf << endl;}//第二种char buf1[1024] = { 0 };//和第一种一样,限定最大的大小while(ofs.getline(buf1, sizeof(buf1)) ){cout << buf1 << endl;}//第三种string buf2;//从ofs输入到buf2中while (getline(ofs, buf2)) {cout << buf2 << endl;}//第四种,不推荐char c;while ((c=ofs.get())!=EOF) {cout << c;}ofs.close();
}
int main() {fun();fun1();return 0;
}
总结:
·读文件可以利用ifstream ,或者ftream类·利用is_open函数可以判断文件是否打开成功
. close关闭文件
二.二进制读取和写入
代码实例:
#include <iostream>
//1.头文件
#include <fstream>
using namespace std;
class person {
public:int age;const char *name; //C++要加const,学到了
};void fun() {//2.打开数据流(读写模式)fstream ofs;//3.打开文件ofs.open("erjinzhi.txt", ios::out | ios::binary);//4.写数据person p;p.age = 18;p.name = "tom";ofs.write((const char*)&p,sizeof(person));p.age = 19;p.name = "tony";ofs.write((const char*)&p, sizeof(person));//5.关闭文件ofs.close();
}void read() {//2.打开数据流模式fstream ofs;//3.打开文件ofs.open("erjinzhi.txt", ios::in | ios::binary);if (!ofs.is_open()) {cout << "打开失败" << endl;}//4.读数据person p;ofs.read((char*)&p, sizeof(p));cout << p.age << endl;cout << p.name << endl;ofs.read((char*)&p, sizeof(p));cout << p.age << endl;cout << p.name << endl;ofs.close();
}
int main() {fun(); //写文件read();return 0;
}
ofs.write((const char*)&p,sizeof(person));
ofs.open("erjinzhi.txt", ios::in | ios::binary);
注意这两个函数的用法即可