目录
引言
一、文本文件
1、写文件
2、读文件
二、二进制文件
1、写文件
2、读文件
引言
程序运行时产生的数据属于临时数据,程序一旦运行结束后,数据也会被释放
通过文件可以将数据保存以持久化
在C++中,对文件进行操作要写头文件<fstream>
文件打开方式:
打开方式 | 作用 |
ios::int | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在,先删除再创建 |
ios::binary | 二进制方式写文件 |
而如果想同时用多种方法:
如 以二进制方式在文件尾写文件
ios::binary | ios::ate
而文件的类型分为2种;
一、文本文件
文件以文本的ASCII码形式存储在计算机中
1、写文件
ofstream——写文件 或 fstream
过程:
①写头文件 <fstream>
②创建流对象 ofstream name;
③指定打开方式 name.open("路径",打开方式);
④写内容 name<< "内容";
⑤关闭文件 name.close();
例:创建一个文件,并写入内容
int main()
{
// 创建流对象
ofstream ofs; // 或fstream
// 指定打开方式
ofs.open("ofs.txt", ios::out);
// 写内容
ofs << "Joyce" << endl;
ofs << "Tatina" << endl;
// 关闭文件
ofs.close();
return 0;
}
运行后,我们去源文件目录下找(因为打开方式没有指定要把文件写在哪里,所以创建在默认路径)
2、读文件
与写文件相似
ifstream——写文件 或 fstream
过程:
①写头文件 <fstream>
②创建流对象 ifstream name;
③打开文件,并判断是否成功打开 name.open("路径",打开方式);
④读内容(4种方法) name<< "内容";
⑤关闭文件 name.close();
// 读文件
void test02()
{
// 创建流对象
ifstream ifs; // 或fstream
// 指定打开方式
ifs.open("ofs.txt", ios::out);
// 判断是否打开
if (!ifs.is_open())
{
cout << "文件打开失败!" << endl;
return;
}
// 读内容
// mode 1
char buf1[1024] = { 0 };
while (ifs >> buf1)
{
cout << buf1 << endl;
}
// mode 2
char buf2[1024] = { 0 };
while (ifs.getline(buf2, 1024))
{
cout << buf2 << endl;
}
// mode 3
string buf3;
while (getline(ifs, buf3)) // 全局函数getline
{
cout << buf3 << endl;
}
// mode 4
char buf4;
while ((buf4 = ifs.get()) != EOF) // EOF文件末尾标志
{
cout << buf4;
}
// 关闭文件
ifs.close();
}
任意一种输出都是这个
总之,写文件——ofstream,读文件——ifstream,读写文件——fstream
二、二进制文件
以二进制形式对文件进行读写操作
打开方式:ios::binary
1、写文件
二进制方式写文件主要通过流对象调用成员函数write
函数 :ostream& write(const char * buffer,int len);
buffer:指向内存中一段存储空间
len:读写的字节数
class person
{
public:
char m_name[64];
int m_age;
};
void test03()
{
// 创建流对象
ofstream ofs;
// 打开文件
ofs.open("person.txt", ios::out | ios::binary);
// 或者创建时直接初始化
// ofstream ofs("person.txt", ios::out | ios::binary);
// 写文件
person p = { "Joyce",22 };
ofs.write((const char*)&p, sizeof(person));
// 关闭文件
ofs.close();
}
使用write函数
2、读文件
二进制方式写文件主要通过流对象调用成员函数read
函数 :ostream& read(const char * buffer,int len);
buffer:指向内存中一段存储空间
len:读写的字节数
void test04()
{
// 创建流对象
ifstream ifs;
// 打开文件
ifs.open("person.txt", ios::in | ios::binary);
// 判断是否打开
if (!ifs.is_open())
{
cout << "文件打开失败!" << endl;
return;
}
// 读文件
person p;
ifs.read((char*)&p, sizeof(person));
cout << p.m_name << p.m_age << endl;
// 关闭文件
ifs.close();
}
使用read函数