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

相关推荐
我是坑货16 分钟前
Spring学习笔记:Spring的基于注解的XML的详细配置
笔记·学习·spring
开开心心就好1 小时前
高效视频倍速播放插件推荐
python·学习·游戏·pdf·计算机外设·电脑·音视频
行云流水剑2 小时前
【学习记录】Element UI导入报错 * element-ui/lib/theme-chalk/index.css in ./src/main.js
css·学习·ui
鸽子炖汤4 小时前
LRC and VIP
c++·算法·图论
鑫鑫向栄4 小时前
[蓝桥杯]机器人塔
数据结构·c++·算法·蓝桥杯
爱意随风起风止意难平4 小时前
003 flutter初始文件讲解(2)
学习·flutter
好好学习O(∩_∩)O4 小时前
QT6引入QMediaPlaylist类
前端·c++·ffmpeg·前端框架
whoarethenext4 小时前
C/C++ OpenCV 矩阵运算
c语言·c++·opencv·矩阵运算
东京老树根4 小时前
SAP学习笔记 - 开发18 - 前端Fiori开发 应用描述符(manifest.json)的用途
笔记·学习
虾球xz5 小时前
CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures
java·开发语言·c++·学习