目录
5、文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化。
C++中对文件操作需要包含头文件 #include <fstream>,文件类型分为2种:
文本文件:文件以文本的ASCII码形式存储在计算机中
二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
操作文件的三大类:1.ofstream写操作;2.ifstream读操作;3.fstream读写操作。o-output、i-input
5.1、文本文件
5.1.1、写文件
写文件步骤如下:
包含头文件 #include <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>
#include <fstream>//1、包含头文件<fstream>
using namespace std;
void test01() {
//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 <fstream>
创建流对象 ifstream ifs;
打开文件并判断文件是否打开成功 ifs.open("文件路径",打开方式);
读数据,四种方式读取
关闭文件 ifs.close();
#include <iostream>
#include <fstream>//【1】包含头文件
#include <string>
using namespace std;
void test01() {
//【2】创建流对象
ifstream ifs;
//【3】打开文件,并且判断文件是否打开成功
ifs.open("test.txt", ios::in);
if (!ifs.is_open()) {
cout << "文件打开失败!" << endl;
return;
}
//【4】读取文件数据
//第1种方式
//char buf[1024] = { 0 };//字符数组
//while (ifs >> buf) {
// cout << buf << endl;
//}
//第2种方式
//char buf[1024] = { 0 };
//while (ifs.getline(buf, sizeof(buf))) {
// cout << buf << endl;
//}
//第3种方式
//string buf;
//while (getline(ifs, buf)) {
// cout << buf << endl;
//}
//第4种方式
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是读写的字节数。
总结:文件输出流对象可以通过write函数以二进制方式写数据。
#include <iostream>//二进制文件-写文件
#include <fstream>//1、包含头文件
#include <string>
using namespace std;
class Person {
public:
char m_Name[64];//姓名
int m_Age;//年龄
};
void test01() {
//2、创建输出流对象
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(p));//强转
//5、关闭文件
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
5.2.2、读文件
二进制方式读文件主要利用流对象调用成员函数read。
函数原型:
istream& read(char *buffer, int len);参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数。
文件输入流对象可以通过read函数以二进制方式读数据。
#include <iostream>
#include <fstream>//1、包含头文件
#include <string>
using namespace std;
class Person {
public:
char m_Name[64];//姓名
int m_Age;//年龄
};
void test01() {
//2、创建流对象
//ifstream ifs;
ifstream ifs("person.txt", ios::in | ios::binary);
//3、打开文件,判断文件是否打开成功
//ifs.open("person.txt", ios::in | ios::binary);
if (!ifs.is_open()) {
cout << "文件打开失败!" << endl;
}
//4、读文件
Person p;
ifs.read((char *)&p, sizeof(Person));//(char *)强转
cout << "姓名:" << p.m_Name << ",年龄:" << p.m_Age << endl;
//5、关闭文件
ifs.close();
}
int main() {
test01();
system("pause");
return 0;
}
通宵玩游戏能带来快感,通宵学习工作也能带来延迟的成就感,二者又有什么区别呢?人各有所求,只要代价是现在和未来的自己承受得起的。本质上还是因为自己的眼光和格局,阅历不到位。
好一片石尽鸟投林,落了片白茫茫大地真干净。——《红楼梦》
华语群星-锵剑慨歌(剧情版) 自号混世,也长醉急枕臂窥星穹;启鞘试锋,终唤得掌心万钧霆动。
[cp]我的一生应当这样度过:当我回首往事的时候,我因自己的虚度年华而感到自在,也因自己的碌碌无为而感到满足。
但理智又告诉我不能这样活,今年读了很多书,认识了几个新朋友,学会了拍照,学会了化妆,尝试让自己去接触到许多新事物。
这半年你的目标实现了多少呢?#我的年中总结# [/cp]
[cp]涓涓细流汇成大海,点点星光点亮银河。祝家人们大学一别,前程似锦。 愿他年再相逢,卿依然眉眼如初。[/cp]
或忠信而死节兮,或訑谩而不疑。秉忠贞之志,守谦退之节。
春林花多媚,春鸟意多哀。
春风复多情,吹我罗裳开。
朝登凉台上,夕宿兰池里。
乘月采芙蓉,夜夜得莲子。
仰头看桐树,桐花特可怜。
愿天无霜雪,梧子解千年。
渊冰厚三尺,素雪覆千里。
我心如松柏,君情复何似?
我是风希,裂风之王,半身为鱼半身为鸟,必将一统乱星海,拯救碧天苍海生灵!点击下方大拇指,助我神器出世,一举捣毁星宫!
本文介绍了C++中文件操作的基础,包括文本文件的写入与读取,以及二进制文件的读写方法,通过实例展示了如何使用fstream、ofstream和ifstream进行操作。

93万+

被折叠的 条评论
为什么被折叠?



