当前位置: 首页 > article >正文

C++核心编程之文件操作

C++核心编程之文件操作

        程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。因此,我们需要通过文件来将数据持久化,能够有效地将数据保存到本地电脑某个地方。

        C++中对文件操作需要包含头文件#include<fstream>

        文件类型分为两种

文件类型概述
文本文件文件以文本的ASCII码形式存储在计算机中
二进制文件文件以文本的二进制形式存储在计算机中

        操作文件的三个操作类别:

  • ofstream:写操作
  • ifstream: 读操作
  • fstream : 读写操作

1文本文件

1.1写文件

步骤如下:

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二进制方式

注意:文件打开方式可以配合使用,利用|操作符

代码如下:

#include<iostream>
using namespace std;
#include<fstream>

// 文本文件 写文件
void test01()
{
    // 1.包含头文件 fstream
    // 2.创建流对象
    ofstream ofs;

    // 3.指定打开方式
    ofs.open("test.txt", ios::out);

    // 4.写内容
    ofs<<"天上的星星"<<endl;
    ofs<<"地上的龟龟"<<endl;

    // 5.关闭文件
    ofs.close();

}


int main()
{
    test01();

    system("pause");
    return 0;
}

总结:

  1. 文件操作必须包含头文件fstream
  2. 读文件可以利用ofstream或者fstream类
  3. 打开文件时候需要指定操作文件的路径,以及打开方式
  4. 利用<<可以向文件中写数据
  5. 操作完毕,要关闭文件

1.2读文件

        读文件与写文件步骤相似,但是读取方式相对于比较多。

步骤如下:

1. 包含头文件   

   #include<fstream>

2. 创建流对象  

   ifstream ifs;

3. 打开文件并判断文件是否打开成功

   ifs.open("文件路径",打开方式);

4. 读数据

   四种方式读取

5. 关闭文件

   ifs.close();

代码如下:

#include<iostream>
using namespace std;
#include<fstream>
#include<string>

// 文本文件 读文件
void test01()
{
    // 1.包含头文件 fstream
    // 2.创建流对象
    ifstream ifs;

    // 3.打开文件 并且判断是否打开成功
    ifs.open("test.txt", ios::in);

    if (!ifs.is_open())
    {
        cout<<"文件打开失败"<<endl;
        return;
    }

    // 4.读数据
    
    // 第一种读数据方法
    // char buf[1024] = {0};
    // while (ifs>>buf)
    // {
    //     cout<<buf<<endl;
    // }

    // 第二种读数据方法
    // char buf[1024] = {0};
    // while (ifs.getline(buf, sizeof(buf)))
    // {
    //     cout<<buf<<endl;
    // }

    // 第三种读数据方法
    // string buf;
    // while (getline(ifs, buf))
    // {
    //     cout<<buf<<endl;
    // }

    // 第四种读数据方法
    char c;
    while ((c=ifs.get())!= EOF)   // EOF:end of file
    {
        cout<<c;
    }

    // 5.关闭文件
    ifs.close();

}


int main()
{
    test01();

    system("pause");
    return 0;
}

总结:

  1. 读文件可以利用ifstream或者fstream类
  2. 利用is_open函数可以判断文件是否打开成功
  3. close 关闭文件 

2 二进制文件

2.1 写文件

        以二进制的方式对文件进行读写操作,打开方式要指定为ios::binary。二进制方式写文件主要利用流对象调用成员函数write。

        函数原型 :ostream& write(const char * buffer,int len);

        参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

代码如下:

#include<iostream>
using namespace std;
#include<fstream>

// 二进制文件 写文件
class Person
{
public:

    char m_Name[64];
    int m_Age;
};

void test01()
{
    // 1.包含头文件 fstream
    // 2.创建流对象
    ofstream ofs;

    // 3.打开文件
    ofs.open("test_person.txt", ios::out|ios::binary);

    // 4.写内容
    Person p = {"李明", 18};
    ofs.write((const char *)&p, sizeof(Person));

    // 5.关闭文件
    ofs.close();

}


int main()
{
    test01();

    system("pause");
    return 0;
}

总结:文件输出流对象可以通过write函数,以二进制方式写数据

2.2 读文件

        以二进制的方式对文件进行读写操作,打开方式要指定为ios::binary。二进制方式读文件主要利用流对象调用成员函数read。

        函数原型:istream& read(char *buffer,int len);

        参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

代码如下:

#include<iostream>
using namespace std;
#include<fstream>

// 二进制文件 读文件
class Person
{
public:

    char m_Name[64];
    int m_Age;
};

void test01()
{
    // 1.包含头文件 fstream
    // 2.创建流对象
    ifstream ifs;

    // 3.打开文件
    ifs.open("test_person.txt", ios::in|ios::binary);
    if(! ifs.is_open())
    {
        cout<<"文件打开失败"<<endl;
        return;
    }
    // 4.读内容
    Person p;

    ifs.read((char *)&p, sizeof(Person));

    cout<<"姓名:"<<p.m_Name<<" 年龄:"<<p.m_Age<<endl;
    

    // 5.关闭文件
    ifs.close();

}


int main()
{
    test01();

    system("pause");
    return 0;
}

总结: 文件输入流对象 可以通过read函数,以二进制方式读数据。


http://www.kler.cn/a/566335.html

相关文章:

  • 无人机自主导航与避障技术!
  • 力扣3112. 访问消失节点的最少时间
  • FS800DTU联动OneNET平台数据可视化View
  • git从零学起
  • std::sort 排序算法本质
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-ops.py
  • 软件工程复试专业课-能力成熟度模型CMM
  • 科技赋能!深圳市悠声科技有限公司荣获“GAS消费电子科创奖-技术进步奖”!
  • 理解 AI IDE 中的代码库索引:深入探讨 Cursor 的实现
  • 区块链的基本原理和优势
  • 刨析刷任务赚钱平台的算法(众包经济应用)
  • 服务器间免密登录
  • 单片机学习笔记——入门51单片机
  • spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)
  • 【Java】Tomcat日志
  • qt:MainWindow
  • 【AI深度学习基础】NumPy完全指南进阶篇:核心功能与工程实践(含完整代码)
  • 一文掌握Charles抓包工具的详细使用
  • 第十五篇GEE中下载夜间灯光数据
  • 《A++ 敏捷开发》- 17 持续集成