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

C++难点十二:读写文件,第1张

读写文件 文本文件写 *** 作其中,写 *** 作第三步的常见打开方式 读 *** 作读写示例 二进制文件写 *** 作读 *** 作读写示例

文本文件 写 *** 作 包含头文件
#inclass="superseo">clude 创建流对象
ofstream ofs;打开文件
ofs.open("文件路径",打开方式);写数据
ofs<<"写入的数据";关闭文件
ofs.close(); 其中,写 *** 作第三步的常见打开方式
打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在,那么先删除,再创建
ios::binary二进制方式

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

读 *** 作 包含头文件
#include 创建流对象
ifstream ifs;打开文件并判断文件是否打开成功
ifs.open("文件路径",打开方式);读数据
四种方式读取关闭文件
ifs.close(); 读写示例
#include 
#include 
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 创建流对象
ofstream ofs;打开文件
ofs.open("文件路径",打开方式);(注:这一步打开方式一定要有一个是ios::binary)写数据
ofs<<"写入的数据";关闭文件
ofs.close(); 读 *** 作 包含头文件
#include 创建流对象
ifstream ifs;打开文件并判断文件是否打开成功
ifs.open("文件路径",打开方式);读数据
四种方式读取关闭文件
ifs.close(); 读写示例
#include 
#include 
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,所以在使用的时候也要区别开。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存