读写文件
文本文件
写操作
- 包含头文件
 #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 <fstream>
- 创建流对象
 ifstream ifs;
- 打开文件并判断文件是否打开成功
 ifs.open("文件路径",打开方式);
- 读数据
 四种方式读取
- 关闭文件
 ifs.close();
读写示例
#include <iostream>
#include <fstream>
using namespace std;
void Text_Write()
{
    ofstream ofs;
    ofs.open("test.txt",ios::out);
    cout<<"执行了一次文本写操作"<<endl;
    ofs<<"2022-02-28"<<endl;
    ofs.close();
}
void Text_Read_1()
{
    ifstream ifs;
    ifs.open("test.txt",ios::in);
    cout<<"执行了一次文本读操作(方法1)"<<endl;
    if(!ifs.is_open())
    {
        cout<<"文件打开失败"<<endl;
    }
    //第一种读取方式
    
    char buf[1024]={0};
    while(ifs>>buf)
    {
        cout<<buf<<endl;
    }
    ifs.close();
    
}
void Text_Read_2()
{
    ifstream ifs;
    ifs.open("test.txt",ios::in);
    cout<<"执行了一次文本读操作(方法2)"<<endl;
    if(!ifs.is_open())
    {
        cout<<"文件打开失败"<<endl;
    }
    //第二种读取方式
    
    char buf[1024]={0};
    while(ifs.getline(buf,sizeof(buf)))
    {
        cout<<buf<<endl;
    }
    ifs.close();
    
}
void Text_Read_3()
{
    ifstream ifs;
    ifs.open("test.txt",ios::in);
    cout<<"执行了一次文本读操作(方法3)"<<endl;
    if(!ifs.is_open())
    {
        cout<<"文件打开失败"<<endl;
    }
    //第三种读取方式
    
    string buf;
    while(getline(ifs,buf))
    {
        cout<<buf<<endl;
    }
    ifs.close();
    
}
void Text_Read_4()
{
    ifstream ifs;
    ifs.open("test.txt",ios::in);
    cout<<"执行了一次文本读操作(方法4)"<<endl;
    if(!ifs.is_open())
    {
        cout<<"文件打开失败"<<endl;
    }
    //第四种读取方式
    
    char c;
    while((c=ifs.get())!=EOF)
    {
        cout<<c;
    }
    ifs.close();
    
}
int main()
{
    Text_Write();
    Text_Read_4();
    
    return 0;
}
二进制文件
写操作
- 包含头文件
 #include <fstream>
- 创建流对象
 ofstream ofs;
- 打开文件
 ofs.open("文件路径",打开方式);(注:这一步打开方式一定要有一个是ios::binary)
- 写数据
 ofs<<"写入的数据";
- 关闭文件
 ofs.close();
读操作
- 包含头文件
 #include <fstream>
- 创建流对象
 ifstream ifs;
- 打开文件并判断文件是否打开成功
 ifs.open("文件路径",打开方式);
- 读数据
 四种方式读取
- 关闭文件
 ifs.close();
读写示例
#include <iostream>
#include <fstream>
using namespace std;
class Person
{
public:
   char m_Name[64];
   int m_Age;
};
void Binary_Write()
{
   ofstream ofs;
   ofs.open("test.txt",ios::out | ios::binary);
   
   //或者将上两步合成一步。
   //ofstream ofs("test.txt",ios::out | ios::binary);
   
   cout<<"执行了一次二进制写操作"<<endl;
   Person p ={"张三",18};
   ofs.write((const char*)&p, sizeof(Person));
   
   ofs.close();
}
void Binary_Read()
{
   ifstream ifs;
   ifs.open("test.txt",ios::in | ios::binary);
   cout<<"执行了一次二进制读操作"<<endl;
   if(!ifs.is_open())
   {
       cout<<"文件打开失败"<<endl;
   }
   //读取方式
   Person p;
   ifs.read((char*)&p, sizeof(Person));
   cout<<"姓名:"<<p.m_Name<<endl<<"年龄:"<<p.m_Age<<endl;
   ifs.close();
   
}
int main()
{
   Binary_Write();
   Binary_Read();
   
   return 0;
}
注意,二进制读写函数原型是这样的:
 写:ostream& write(const char* buffer, int len);
 读:istream& read(char * buffer, int len);
 里面一个是const一个是不加const,所以在使用的时候也要区别开。










