> 文章列表 > C++之 文件操作(file operation)

C++之 文件操作(file operation)

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函数