C++之 文件操作(file operation)
目录
引言
一、文本文件
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 1char buf1[1024] = { 0 };while (ifs >> buf1){cout << buf1 << endl;}// mode 2char buf2[1024] = { 0 };while (ifs.getline(buf2, 1024)){cout << buf2 << endl;}// mode 3string buf3;while (getline(ifs, buf3)) // 全局函数getline{cout << buf3 << endl;}// mode 4char 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函数