0
点赞
收藏
分享

微信扫一扫

C++难点十二:读写文件

Ad大成 2022-03-11 阅读 71

读写文件

文本文件

写操作

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ofstream ofs;
  3. 打开文件
    ofs.open("文件路径",打开方式);
  4. 写数据
    ofs<<"写入的数据";
  5. 关闭文件
    ofs.close();

其中,写操作第三步的常见打开方式

打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在,那么先删除,再创建
ios::binary二进制方式

:可以复合这些文件打卡方式,利用|操作符就可以了。
:用二进制方式写文件: ios::binary | ios::out

读操作

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ifstream ifs;
  3. 打开文件并判断文件是否打开成功
    ifs.open("文件路径",打开方式);
  4. 读数据
    四种方式读取
  5. 关闭文件
    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;
}

二进制文件

写操作

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ofstream ofs;
  3. 打开文件
    ofs.open("文件路径",打开方式);(注:这一步打开方式一定要有一个是ios::binary)
  4. 写数据
    ofs<<"写入的数据";
  5. 关闭文件
    ofs.close();

读操作

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ifstream ifs;
  3. 打开文件并判断文件是否打开成功
    ifs.open("文件路径",打开方式);
  4. 读数据
    四种方式读取
  5. 关闭文件
    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,所以在使用的时候也要区别开。

举报

相关推荐

0 条评论