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

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

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

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

文件类型分为两种

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

二进制文件 文件以文本的二进制形式存储在计算机中

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

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

1文本文件

1.1写文件

步骤如下:

bash 复制代码
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 二进制方式

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

代码如下:

cpp 复制代码
#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读文件

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

步骤如下:

bash 复制代码
1. 包含头文件   

   #include<fstream>

2. 创建流对象  

   ifstream ifs;

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

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

4. 读数据

   四种方式读取

5. 关闭文件

   ifs.close();

代码如下:

cpp 复制代码
#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是读写的字节数

代码如下:

cpp 复制代码
#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是读写的字节数

代码如下:

cpp 复制代码
#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函数,以二进制方式读数据。

相关推荐
双叶8362 分钟前
(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
c语言·开发语言·c++·单片机·嵌入式硬件·microsoft·51单片机
阿里云云原生2 分钟前
C++ AI 通义灵码 VSCode插件安装与功能详解
c++
阿巴~阿巴~34 分钟前
蓝桥杯 C/C++ 组历届真题合集速刷(一)
c语言·c++·算法·蓝桥杯
_x_w40 分钟前
【12】数据结构之基于线性表的排序算法
开发语言·数据结构·笔记·python·算法·链表·排序算法
s_little_monster1 小时前
【Linux】线程控制函数
linux·运维·服务器·经验分享·笔记·学习·学习方法
kfepiza1 小时前
硬盘分区格式之GPT(GUID Partition Table)笔记250406
linux·windows·笔记·gpt
十年之少1 小时前
粘性定位(position:sticky)——微信小程序学习笔记
笔记·学习·微信小程序
切图只会helloworld1 小时前
RabbitMQ笔记
笔记
!!!5252 小时前
MongoDB 新手笔记
数据库·笔记·mongodb
姝孟2 小时前
Linux学习笔记 1
linux·笔记·学习