内容纲要
文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过文件可以将数据持久化
C++中对文件操作需要包含头文件
文件类型分为两种:
- 文本文件 --- 文本以文本的 ASCII码 形式储存在计算机中
- 二进制文件 -- 文本以文本的 二进制 形式存储在计算机中,用户一般不能直接读懂他们
操作文件的三大类:
- ofstream : 写操作
- ifstream : 读操作
- fstream : 读写操作
写入文件
注意:文件打开方式可以配合使用,利用 | 操作符
例如:用二进制方式写文件 ios::binary | ios::out
#include <iostream>
#include <fstream> //1.引入头文件
#include <string>
using namespace std;
void test() {
//2.创建输入/输出流对象
ofstream ofs;
//3.创建文件/打开文件
ofs.open("test.txt", ios::out);
//4.通过ofstream向文件里面添加内容.
ofs << "姓名:法外狂徒张三" << endl;
ofs << "年龄:18" << endl;
//5.关闭文件
ofs.close();
//很像 JAVA 的德鲁伊数据流的创建与关闭啊。!!!
}
void main() {
test();
system("pause");
}
读取文件
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void test() {
//2.创建对象
ifstream ifs;
//3.打开文件
ifs.open("test.txt", ios::in);
if (!(ifs.is_open()))
{
cout << "文件打开失败" << endl;
}
//4.添加内容。有多种方式。
第一种:
char charBuff[1024] = { 0 };
while (ifs >> charBuff)
{
cout << charBuff << endl;
}
第二种:
char charBuff[1024] = { 0 };
while (ifs.getline(charBuff,sizeof(charBuff)))
{
cout << charBuff << endl;
}
cout << sizeof(charBuff) << endl;//1024
第三种
string strBuffer;
while (getline(ifs,strBuffer))
{
cout << strBuffer << endl;
}
第四种 //不推荐用
char c;
while ((c = ifs.get()) != EOF) //EOF end of file;文件尾部的标志
{
cout << c;
}
//5.关闭文件
ifs.close();
}
void main() {
test();
}
Summary
- 读文件可以利用
ifstream
,或者 fstream类 - 利用
is_open
函数可以判断文件是否打开成功。 - close 关闭文件
二进制文件
- 在iris 项目中也有见过这类代码。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//同比于Iris 项目中的虹膜模板二进制的写入。
class Person {
public:
char name[1024];
int age;
};
void test() {
Person p = { "李四 " , 20 };
//1.引入头文件
//2.创建对象
//ofstream ofs();
ofstream ofs("Person.txt", ios::out | ios::binary);
//3.打开文件
//ofs.open("Person.txt", ios::out | ios::binary);//这里还可以在创建对象的时候就直接指定它的打开方式。
//4.写入的内容;
ofs.write((const char*)&p, sizeof(p));
//5.关闭文件
ofs.close();
}
void main() {
test();
}
ofs.write((const char*)&p, sizeof(p));
- 对文件进行操作的时候尽量不用C++ 的string 为了避免出现问题,建议使用C 语言的char 数组。
二进制文件读文件
istream& read(char *buffer,int len);
#include<iostream>
#include<fstream>
#include"string"
using namespace std;
class Person {
public:
char m_Name[1024];
int m_Age;
};
void test() {
//1.引入头文件
//2.创建对象
ifstream ifs;
//3.打开文件,并判断其是否打开成功
ifs.open("Person.txt", ios::binary | ios::in);
if (!(ifs.is_open()))
{
cout << "文件未成功打开" << endl;
}
//4.读取文件
Person p;
ifs.read((char*)&p, sizeof(Person));
cout << "姓名: " << p.m_Name << "年龄:" << p.m_Age << endl;
//5.关闭文件
ifs.close();
}
void main() {
test();
}