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

相关推荐
十五年专注C++开发13 分钟前
FlatBuffers: 一个高效的零拷贝二进制序列化库
c++·序列化·反序列化·flatbuffers
小弥儿20 分钟前
38K星的开源项目 t3code:给 Claude Code 和 Codex 装一个手机遥控器
学习·智能手机·开源·github
xys_67838 分钟前
深挖C++:C++入门基础
开发语言·c++
xxwl5851 小时前
Nginx 基础学习笔记
笔记·学习·nginx
Star(up up up)1 小时前
Docker系列---Dockerfile镜像文件
人工智能·经验分享·学习·程序人生·docker·容器·github
January12071 小时前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
高冷小鱼殿下1 小时前
C 语言指针与输入输出
c++
路溪非溪2 小时前
C++标准库之智能指针
linux·开发语言·c++
snysy2 小时前
# 磁盘IO性能fio测试实操笔记
笔记·磁盘io·fio
外收内放2 小时前
ENSP学习记录(4)
服务器·学习·智能路由器