C++中的文件操作

article/2025/10/11 19:39:39

目录

  • 文件操作
    • C++中的文件操作时基于面向对象的
    • C++中文件类型分为两种:
    • 操作文件的三大类(这些类都属于标准模板库):
    • 1 文本文件
      • 1.1 写文件
        • 写文件步骤如下:
        • 文件打开方式:
      • 1.2 读文件
        • 读取文件数据的四种方式
          • 按照喜好记前三个中的一个就行
        • 综合
    • 2 二进制文件(不仅可以操作内置数据类型还可以操作自定义数据类型)
      • 注意打开方式要指定为 ==ios::binary==
      • 2.1 写文件
        • 注意:对文件操作时,字符串最好使用C语言风格的字符串(也就是字符数组)因为wirte()和read函数()都包含参数char *,用string会引发错误
      • 2.2 读文件
        • 步骤
      • 注意事项:



文件操作


视频链接



C++中的文件操作时基于面向对象的


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

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

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



C++中文件类型分为两种:

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


操作文件的三大类(这些类都属于标准模板库):

  1. ofstream(output):写入文件操作
  2. ifstream(input): 读取数据操作
  3. fstream : 读写操作。一般使用这个类进行文本操作



1 文本文件

1.1 写文件

写文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ofstream ofs;

  3. 打开文件

    ofs.open(“文件路径”,打开方式);
    文件路径可以直接写个文件名,因为如果不指定路径的话,他会默认在当前项目路径下。

  4. 写数据

    ofs << “写入的数据”;
    类似于cout<<“…”; cout就是往屏幕上输出,而ofs就是往文件里输出

  5. 关闭文件,这一步很重要而且容易遗漏

    ofs.close();



文件打开方式:

在这里插入图片描述



#include<iostream>
using namespace std;
#include<string>
// 1.包含头文件 fstream
#include<fstream>
// 文本文件 写文件
void test01() {// 1.包含头文件// 2.创建流对象ofstream ofs;// 3.指定打开的方式//文件名为test.txtofs.open("test.txt", ios::out);// 4.写内容ofs << "姓名:张三" << endl << "年龄:19" << endl << "性别:男" << endl;// 5.关闭文件ofs.close();}
int main() {test01();cin.get();return 0;}

在这里插入图片描述



在这里插入图片描述

总结:

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




1.2 读文件

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

读文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ifstream ifs;

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

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

  4. 读数据

    四种方式读取

  5. 关闭文件,记住别忘了要关闭文件

    ifs.close();



判断文件是否打开成功(其实也就是判断有没有这个文件):

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

if_open()是系统自带的布尔类型函数,打开成功返回1
打开失败返回0(这个函数是判断文件是否存在的)



读取文件数据的四种方式

按照喜好记前三个中的一个就行
  1. 第一种方式:把文件内容全部放在字符数组中
//第一种方式char buf[1024] = { 0 };//首先初始化字符数组while (ifs >> buf)//  ifs右移运算符,他会读取数据并放到buf数组中,当数据全部读完后,返回一个false,while循环也就结束了{cout << buf << endl;}


  1. 第二种方式:使用ifs.getline()函数
    ifs.getline(char *str,count)中有两个参数;

char *str:表示我们要把读取的数据放到哪个地方,一般是个数组
count:所占的空间
在这里插入图片描述



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


  1. 第三种方式:把内容放到string字符串中
    包含头文件include
    然后使用函数getline(输入流对象,准备好的字符串)
//第三种string buf;while (getline(ifs, buf)){cout << buf << endl;}


  1. 不太推荐的第四种方式:他会将文件中的所有数据一个一个地读出来,放到字符C里边。效率太差

ifs.get()每次只读一个字符。EOF代表末尾的意思

// 第四种char c;while ((c = ifs.get()) != EOF){cout << c;}



综合

#include<iostream>
using namespace std;
//1. 包含头文件
#include<fstream>
#include<string>void test01()
{   // 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)//{//cout << c;//}// 5. 关闭文件ifs.close();}int main() {test01();system("pause");return 0;
}

在这里插入图片描述






2 二进制文件(不仅可以操作内置数据类型还可以操作自定义数据类型)

以二进制的方式对文件进行读写操作

注意打开方式要指定为 ios::binary



2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write

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

在这里插入图片描述





参数解释:参数一:字符指针常量buffer(也可以理解为就是一段地址(指针就是地址),不过要把它强制转换成const char * ) 。 buffer指向内存中一段存储空间。len是读写的字节数

数组名就可以直接作为参数一,当传数组给一个函数时,数组类型自动转换为指针类型,传的实际是数组元素首地址。

建议看的文章1:将地址强制转换为指针

建议看的文章2指针的强制类型转换



注意:对文件操作时,字符串最好使用C语言风格的字符串(也就是字符数组)因为wirte()和read函数()都包含参数char *,用string会引发错误

在这里插入图片描述



#include<iostream>
using namespace std;#include <fstream>
#include <string>class Person
{
public:char m_Name[64];int m_Age;
};//二进制文件  写文件
void test01()
{//1、包含头文件//2、创建输出流对象ofstream ofs("person.txt", ios::out | ios::binary|ios::trunc);//3、打开文件//ofs.open("person.txt", ios::out | ios::binary);int a = 55;int d[20];for (int i = 0; i < 20; i++) {d[i] = i;}Person p = { "张三"  , 18 };char c[15] = { "Hello,World!" };//4、写文件ofs.write((const char*)&a, sizeof(a));ofs.write((const char*)d, sizeof(c));ofs.write((const char*)&p, sizeof(p));ofs.write((const char*)c, sizeof(c));//5、关闭文件ofs.close();
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述



二进制文件打开是乱码
在这里插入图片描述




2.2 读文件

二进制方式读文件主要利用流对象调用成员函数read

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

参数解释:参数一:字符指针buffer(也可以理解为就是一段地址(指针就是地址),不过要把它强制转换成 char * ) 。它指向内存中一段存储空间。len是读写的字节数

数组名可以直接作为参数一,当传数组给一个函数时,数组类型自动转换为指针类型,传的实际是数组元素首地址。



步骤

  1. 包含头文件
  2. 创建流对象
  3. 打开文件并判断文件是否打开成功
  4. 将二进制数据转换为可读数据
  5. 打印转换后的可读数据
  6. 关闭文件
#include<iostream>
using namespace std;
// 1.包含头文件
#include <fstream>
#include <string>class Person
{
public:char m_Name[64];int m_Age;
};void test01()
{// 2.创建流对象的同时打开文件ifstream ifs("person.txt", ios::in | ios::binary);// 3.判断文件是否打开成功if (!ifs.is_open()){cout << "文件打开失败" << endl;}Person p;// 4.将二进制数据转换为可读数据// 这一步不能将数据读出到屏幕上,这一步的作用只是把二进制数据转换为可读数据int d;int z[20];char c[15];ifs.read((char*)&d, sizeof(d));ifs.read((char*)z, sizeof(z));ifs.read((char*)&p, sizeof(p));ifs.read((char*)c, sizeof(c));// 5.打印转换后的可读数据// 用cout即可读出数据cout << "d=" << d << endl;cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;for (int i = 0; i < 20; i++) {cout << z[i] << endl;}for (int i = 0; i < 15; i++) {cout << c[i];}cout << endl;// 6.关闭文件ifs.close();}int main() {test01();system("pause");return 0;
}

在这里插入图片描述





注意事项:

  1. 把什么数据类型写入文件,查看文件时就要用相应的数据类型来接受。

比如用write函数写入一个整形数组:

  int c[20];ofs.write((const char*)&c, sizeof(c));

那么read函数接受时也应用整形数组来接受:

int z[20];
ifs.read((char*)z, sizeof(z));


  1. 用write函数按某一顺序写入了多个数据类型时,read函数查看时也应与写入时的顺序一样

比如按下列顺序用write函数写入了以下四个数据类型:

    int a = 55;int d[20];Person p = { "张三"  , 18 };char c[15] = { "Hello,World!" };//4、按下列顺序写入文件ofs.write((const char*)&a, sizeof(a));ofs.write((const char*)d, sizeof(c));ofs.write((const char*)&p, sizeof(p));ofs.write((const char*)c, sizeof(c));


read函数查看时也得与写入时的顺序相同:

    int d;int z[20];char c1[15];Person p1;
// 注意各个read函数的顺序ifs.read((char*)&d, sizeof(d));ifs.read((char*)z, sizeof(z));ifs.read((char*)&p1, sizeof(p1));ifs.read((char*)c1, sizeof(c1));


不能写成下面这样:

    int d;int z[20];char c1[15];Person p1;ifs.read((char*)&d, sizeof(d));ifs.read((char*)c1, sizeof(c1));ifs.read((char*)z, sizeof(z));ifs.read((char*)&p1, sizeof(p1));

http://chatgpt.dhexx.cn/article/AW70Zyep.shtml

相关文章

什么是文件操作?为什么要有文件操作?

文章目录 前言一、什么是文件1.1 程序文件1.2 数据文件 二、文件的打开与关闭2.1 文件指针2.2 文件的打开与关闭2.3 文件读写详情表&#xff01;&#xff08;重点&#xff09;2.4 文件的顺序读写&#xff01;&#xff08;重点&#xff09;2.5 文件的随机读写2.5.1 fseek2.5.2 f…

常见文件操作函数

目录 一、文件的打开和关闭 1、文件指针 2、文件打开和关闭 二、文件的顺序读写 1、fgetc()和fputc()函数 2、fgets()和fputs()函数 3、fscanf()和fprintf()函数 4、fread()和fwrite()函数 三、文件的随机读写 1、fseek函数 2、ftell函数 3、rewind函数 四、文本文…

【Linux】Linux的文件操作

文件操作对于不少编程初学者来说都是一件头疼的事情&#xff0c;不管你学习的是什么编程语言&#xff0c;C/C/Java/Go/Python ,因为我们学习到的文件相关的操作对你来说都是一个黑盒&#xff0c;我们只是知道我们应该怎么使用相应的文件函数进行操作&#xff0c;而对于内部的实…

文件操作(详解)

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件指针 ​ 3.2 文件的打开和关闭 4. 文件的顺序读写 4.1 对比一组函数&#xff1a; 5. 文件的随机读写 5.1 fseek 5.2 ftell 5.3 rewind 7. 文件读取结束的…

c语言中的文件操作

目录 引入&#xff1a; 一、文件的打开和关闭 1.文件名 2.文件指针 3.文件的打开和关闭 二、对文件如何操作和流 1.对文件操作相关功能&#xff1a; 2.流 三、文件操作函数(顺序读写) 1."w"输出流&#xff1a; 2."r" 输入流 3."wb"与&…

C语言 文件操作

文件操作在我们的使用中虽然占的不多&#xff0c;但是有些时候&#xff0c;还是需要这部分的知识的。比如&#xff0c;我们做了一个C语言版的售卖系统。现在的想法是在关闭的时候保存这次的结果&#xff0c;然后下一次继续使用&#xff0c;这个时候&#xff0c;就可以使用文件操…

手把手教你学Python之文件操作(一文掌握文件操作)

目录 1、Python中文本文件的读写 2、Python中常用的文件与文件夹操作方法 3、Python中Excel文件的读写 4、Python读取Excel文件案例​ 为了保存数据&#xff0c;方便修改和分享&#xff0c;数据通常以文件的形式存储在磁盘等外部存储介质中。根据逻辑上编码不同可将文件大致…

Linux文件操作

目录 一、系统api与库函数的关系二、open和close函数介绍2.1 open方法介绍2.2 close方法介绍 三、open/create函数创建文件时的权限设置四、read和write函数的介绍和使用4.1 read函数介绍4.2 write函数介绍4.3 如何使用 五、lseek函数的介绍和使用5.1 介绍5.2 如何使用 六、阻塞…

python文件操作(一看就懂)

python文件操作 历史遗留问题文件介绍打开文件转定义字符Python格式化字符串的替代符以及含义Python的转义字符及其含义 &#x1f495;Final~ 历史遗留问题 现在我们接着上文讲&#xff0c;如果没有看过我上篇文章的萌新朋友们可以先去看看&#xff0c;不然一会儿容易读的你满…

Linux的文件操作命令

接下来将介绍Linux中一些常用的文件操作命令&#xff0c;今天先演示五个类型的命令操作&#xff0c;内容不是特别的全&#xff0c;找的几个典型的常用的演示&#xff0c;想要全面的可以另找资料了解一下&#xff0c;推荐大家跟着敲跟着做才能加深记忆&#xff0c;祝大家学的开心…

Linux —— 文件操作

目录 1.内核提供的文件系统调用 1.1open和close 1.2标记位 1.3write和read 2.文件描述 2.1文件描述符 2.2文件描述符分配规则 3.重定向 3.1最“挫”的重定向 3.2使用系统调用 3.3重定向原理 3.4让我们的"shell"支持重定向操作 4.一切皆文件 5.缓冲区 5…

文件操作详解

1.文件的概念 文件的基本概念   所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称&#xff0c;叫做文件名。实际上在前面的各章中我们已经多次使用了文件&#xff0c;例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁…

文件操作(C语言)

目录 一、前言 二、文件的打开和关闭 三、文件的读写 1.文件的顺序读写 2.文件的随机读写 四、文件结束的判定 一、前言 当我们向写好的通讯录程序中输入信息时&#xff0c;有时我们希望能保存输入的信息&#xff0c;不用每次打开这个程序都要重新输入&#xff0c;这时就…

文件操作详解(超级详细)

正常我们的程序在执行的时候程序结束后&#xff0c;会将所有数据清楚&#xff0c;那么我们应该如何保存数据呢&#xff1f;这里我们就需要用文件操作。 一、文件的打开和关闭 1.文件打开、关闭函数—fopen、fclose //打开文件 FILE * pf fopen ( const char * filename, const…

虚拟机安装黑苹果【虚拟机安装,黑苹果安装,黑苹果无法全屏问题】(这应该全网最全的资源了吧~)

一&#xff0c;资源下载 链接&#xff1a;https://pan.baidu.com/s/1cyGiDvkJinx8dnB57gO7UQ 提取码&#xff1a;i615 PS&#xff1a;里面有虚拟机资源&#xff0c;Drawin.ios文件和苹果镜像文件 这里只讲如何用虚拟机安装黑苹果&#xff0c;不讲如何安装虚拟机&#xff0c;下…

VMware虚拟机安装黑苹果10.15 || AMD R7 5800处理器

VMwar版本&#xff1a;16Pro 链接&#xff1a;https://pan.baidu.com/s/1qGHEynWSV4YS9WSNonxiuA?pwdazvh 提取码&#xff1a;azvh macOS链接&#xff0c;版本为Catalina 10.5。这个版本后&#xff0c;os安装包就过10G了&#xff0c;会特别卡。 链接&#xff1a;https://pan…

VMware16安装macOS10.15.1 - 黑苹果 - osx虚拟机

效果图 步骤 下载安装VMware&#xff0c;并且利用unlocker开启macos的支持VMware利用unlocker开启MacOS支持_Rudon滨海渔村的博客-CSDN博客效果步骤下载安装vmware16http://www.winwin7.com/soft/17946.html下载unlocker3.0 &#xff08;这里包括了darwin.iso和darwinPre15.is…

vm虚拟机15.5安装黑苹果maxos-10.14

鼎峰_小配针对vm虚拟机安装黑苹果maxos在学习和研究探索的过程中的一点点心得&#xff0c;从刚接触时的一脸懵逼&#xff0c;到后来慢慢的了解了&#xff0c;废话不多说&#xff0c;直接上干货。 一、需要准备的软件&#xff1a; a)解锁虚拟机MAC补丁&#xff1a;Unlocker 3.0…

图文详解如何在VMware Workstation11虚拟机上安装黑苹果Mac OS X 10.10系统

想要体验黑苹果系统当然要借助于VMware虚拟机了&#xff0c;那么下面大家就来看看亦是美网络小编的图文详解如何在VMware Workstation11虚拟机上安装黑苹果Mac OS X 10.10系统的教程吧&#xff01; 小编的安装环境&#xff1a; 实体机windows8.1专业版 VMware workstation 1…

win10上的VMware安装黑Mac(黑苹果、AMD)

使用AMD处理器的笔记本&#xff0c;在虚拟机上安装MAC操作系统。 本机安装配置&#xff1a; 华硕天选 AMD Ryzen 4800H 24G运存 Mac OS 10.13 High Sierra 1. 下载所需资源 所需资源下载链接&#xff1a; mac os 10.13镜像&#xff0c;其他工具 链接: https://pan.baidu.com/s/…