C++核心编程之通过类和对象的思想对文件进行操作

目录

​​​​​​​一、文件操作

[1. 文件类型分类:](#1. 文件类型分类:)

[2. 操作文件的三大类](#2. 操作文件的三大类)

二、文本文件

1.写文件

2.读文件

三、二进制文件

1.写二进制文件

2.读二进制文件


一、文件操作

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放

通过文件可以将数据持久化

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

1. 文件类型分类:

  1. 文本文件: -文件以文本的ASCII码形式存储在计算机中
  2. 二进制文本: - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们

2. 操作文件的三大类

  1. ofstream :写文加
  2. ifstream :读文件
  3. fstream:读写操作

二、文本文件

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

注意:

文件打开方式可以配合使用, 利用 | 操作符(位或)

示例:

cpp 复制代码
#include<iostream>

#include<fstream>

using namespace std;

int main()

{

    // 1. 包含头文件<fstream>

    // 2. 创建流对象   ofstream ofs;

    // 3. 打开文件 ofs.open("文件路径",打开方式)

    // 4. 写数据   ofs<<"写入数据"

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

 

    ofstream ofs;

    ofs.open("E:/test.txt", ios::out); // 没有指定具体路径存放到当前项目的文件夹下

    ofs << "helo " << endl;

    ofs << "文件操作" << endl;

    ofs.close();

    return 0;

}

结果示例:

总结:

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

2.读文件

1.包含头文件

#include<fstream>

2.创建流对象

ifstream ifs;

3.打开文件

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

4.读数据

四种方式读取

5.关闭文件

ifs.close();

示例:

cpp 复制代码
#include<iostream>

#include<fstream>

using namespace std;

int main()

{

    // 1. 包含头文件<fstream>

    // 2. 创建流对象   ifstream ifs;

    // 3. 打开文件 ofs.open("文件路径",打开方式)

    // 4. 读数据   四种方式读取

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

 

    ifstream ifs;

    ifs.open("E:/test.txt", ios::in);

    if( !ifs.is_open()){

         cout<<"文件打开失败"<<endl;

         //return;

    }

    // 第一种:字符数组

    char buf[1024]={0};

    while(ifs>>buf){

        cout<<buf<<endl;

    }

    // 第二种

    char buf1[1024]={0};

    // 获取一行
        
    while(ifs.getline(buf1,sizeof(buf1))){

        cout<<buf1<<endl;

    }

    // 第三种:字符串中

    string buf2;

    while(getline(ifs,buf2)){

        cout<<buf2<<endl;

    }

    // 第四种:一个一个读取没有一行一行读取快

    char c;// 判断是否读取到了文件的尾部

    while((c = ifs.get())!=EOF){ // end of file

        cout<<c;

    }

    ifs.close();

    return 0;

}

运行结果:

第一种:

第二种:

第三种:

第四种:

总结:

  • 读文件可以利用ifstream,或者fstream类
  • 利用is._open函数可以断文件是否打开成功
  • close关闭文件

三、二进制文件

1.写二进制文件

  • 打开方式要指定为ios::binary
  • 二进制方式写文件主要利用流对象调用成员函数write
  • 函数原型:ostream & write(const char* buffer, int len);
  • 参数:字符指针buffer指向内存中一段存储空间,len是读写得到字节数

示例:

cpp 复制代码
#include<iostream>

#include<fstream>

#include<string>

using namespace std;

class person{

public:

    char Name[64];

    int Age;

};

int main()

{

    // 打开的方式要指定为 iOS::binary

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

    // 1. 包含头文件

    // 2. 创建流对象

    ofstream ofs;

    // 3. 打开文件

    ofs.open("E:/text.txt",ios::out|ios::binary);

    // 4. 写文件

    person p ={"张三",18};

    ofs.write((const char *)&p,sizeof(p));

    // 5. 关闭文件

    ofs.close();
    
    return 0;

}

运行结果示例:

2.读二进制文件

  • 二进制方式读文件主要利用流对象调用成员函数read
  • 函数原型:itream & read(char* buffer, int len);
  • 参数:字符指针buffer指向内存中一段存储空间,len是读写的字节数

示例:

cpp 复制代码
#include<iostream>

#include<fstream>

#include<string>

using namespace std;

class person{

public:

char Name[64];

int Age;

};

int main()

{

    // 打开的方式要指定为 iOS::binary

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

    // 1. 包含头文件

    // 2. 创建流对象

    ifstream ifs;

    // 3. 打开文件  判断文件是否读取成功

    ifs.open("E:/text.txt",ios::in|ios::binary);

    if(!ifs.is_open()){

        return 0;

    }

    // 4. 读文件

    person p ;

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

 

    cout<<"姓名: "<<p.Name<<endl<<"年龄: "<<p.Age<<endl;

    // 5. 关闭文件

    ifs.close();

    return 0;

}

运行结果:

相关推荐
黑不溜秋的7 分钟前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
李白同学36 分钟前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?2 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农2 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿2 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!2 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴2 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程2 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
彳卸风3 小时前
Unable to parse timestamp value: “20250220135445“, expected format is
开发语言
dorabighead3 小时前
JavaScript 高级程序设计 读书笔记(第三章)
开发语言·javascript·ecmascript