C++程序设计:对数据文件的操作与文件流

2024-06-09 20:44

本文主要是介绍C++程序设计:对数据文件的操作与文件流,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

姚老师小课堂开课啦!

一、文件的分类:

1.ASCII码文件:

ASCII文件使用方便,比较直观,便于阅读,便于对字符进行输入输出,但一般占用存储空间较多,而且需要花费转换时间(二进制形式与ASCII码之间的转换)如果是为了能显示和打印以供阅读,应当按ASCII码文件形式输出。

2.二进制文件:

二进制形式文件可以节省外存空间,而且不需要转换时间,但一个字节并不对应一个字符,不能直接显示文件中的内容,如果程序运行过程中有些中间结果数据暂时保存在磁盘文件中,以后又需要输入内存的,用二进制文件保存才是最合适的。

二、文件的打开与关闭:

1.抽象步骤

1、若想要打开一个文件,我们首先需要有一个文件可供打开,让这个文件和文件流对象建立关联,以便使文件流流向这个文件。

2、此外,我们还需要指定文件的工作方式,不同的打开方式对文件保存的结果也会造成影响,因此文件的工作方式也很重要。

2.主要步骤

主要有两种方式可供选择,以下代码和均可达到目的:

#include<iostream>
#include<fstream>//不要忘记包含头文件fstream
using namespace std;
int main() {int a[10];ofstream outfile;outfile.open("loveyq.dat",ios::out);//第一种打开文件的方式可将本行替换为下方注释代码//love_lyq.dat为文件名,ios::out是文件输入输出方式的设置值/*第二种打开文件的方式:* ofstream outfile;//定义ostream类对象outfile* outfile.open("loveyq.dat",ios::out);//使文件流与love_lyq.dat文件建立关联*/if (!outfile) {cerr << "open error" << endl;exit(1);}cout << "enter 10 integer numbers:" << endl;for (int i = 0; i < 10; i++) {cin >> a[i];outfile << a[i] << " ";}outfile.close();return 0;
}
3.运行程序

这时会自动生成一个名为“loveyq.dat”的文件,此时输入的数据将会保存在文件中 

4.打开文件

我们就会看到我们刚刚输入的内容,说明我们刚输入的内容已经被保存到文件中。

 附:打开文件方法:
Step1:重新打开VisualStudio

Step2:右键要打开的项目的文件夹(要打开的文件所在的项目),复制路径

Step3:点开“此电脑”,部分老式系统称之为“我的电脑”,在箭头位置粘贴路径:

 Step4:把最后一个“\”后面的所有部分去掉,这个路径是打开上一级文件夹下的.sln文件,直接回车就会直接打开程序,我们想要打开文件夹从而找到文件,因此需要把这最后一级删去,再按回车就打开文件夹啦~

继续点这个

Step5: 这个就是我们创建出来的文件啦!

附:文件输入输出方式设置值表

需要注意的是,新版本的I/O类库中不提供ios::nocreate和ios::noreplace,以这两种方式在VS2022中操作文件会报错。 

5.新设置值尝试:

当我们以ios::out或ios::in的方式操作文件时,当输入一组新的数据,这组数据会覆盖原来的数据,结果如下。

接下来让我们看一下我们把上方程序中的ios::out改成ios::app会有什么区别吧~

我们发现,新的一组数据没有覆盖原先的数据,而是接着先前的数据继续输入。这是因为当我们以ios::app的方式打开文件时写入的数据将会添加到文件的末尾,而ios::out和ios::in的打开方式将会清除之前的数据。因此,文件的打开方式也很重要。 

三、对文件的操作

前面的程序你可能还会有很多地方看不懂,那么我再在前面程序的基础上完善更多功能,让你更看不懂,逐步讲解~嘻嘻

#include<iostream>
#include<fstream>
using namespace std;
int main() {int a[10];ofstream outfile("f2.dat", ios::out);//打开磁盘文件f2.datif (!outfile)//如果文件没有打开{cerr << "error!" << endl;//就会报错,cerr是标准错误流,用于输出错误信息且不进入缓冲区exit(1);//退出程序}cout << "enter 10 integers:" << endl;for (int i = 0; i < 10; i++) {cin >> a[i];//在控制台中输入数据outfile << a[i] << " ";//向磁盘文件中输出//也就是说,这句语句的意思就是在控制台中输入一个数据就存一个数据到文件中//*****这个是文件中存放数据的顺序,因为只有这句是将数据保存到文件中!!}//排序算法,为了后面输出最大值,看不懂的重修大一上程序设计和计概for (int i = 0; i < 10; i++) {for (int j = i + 1; j < 10; j++) {if (a[i] < a[j])swap(a[i], a[j]);}}for (int i = 0; i < 10; i++) {cout << a[i] << " ";//在控制台上输出排序后的数组}cout << endl;cout << "maximum:" << a[0];//数组最大值在排序后为数组第一位outfile.close();//关闭文件语句return 0;
}

同时,也可以改变文件的打开方式,上示示例将f2.dat作为输出文件,我们也可以将其作为输入文件,从文件中读取数组到程序中:

四、练习:

有了以上的学习积淀,请你完成下面的小练习吧!

可提供的基础代码在:继承与派生类练习plus pro pax-CSDN博客

在这段代码的基础上完成下面的要求吧!

这篇关于C++程序设计:对数据文件的操作与文件流的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046249

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from