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博客

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/346008.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

④-2单细胞学习-cellchat单数据代码补充版(通讯网络)

目录 通讯网络系统分析 ①社会网络分析 1&#xff0c;计算每个细胞群的网络中心性指标 2&#xff0c;识别细胞的信号流模式 ②非负矩阵分解&#xff08;NMF&#xff09;识别细胞的通讯模式 1&#xff0c;信号输出细胞的模式识别 2&#xff0c;信号输入细胞的模式识别 信…

激光点云配准算法——Cofinet / GeoTransforme / MAC

激光点云配准算法——Cofinet / GeoTransformer / MAC GeoTransformer MAC是当前最SOTA的点云匹配算法&#xff0c;在之前我用总结过视觉特征匹配的相关算法 视觉SLAM总结——SuperPoint / SuperGlue 本篇博客对Cofinet、GeoTransformer、MAC三篇论文进行简单总结 1. Cofine…

计算机网络 期末复习(谢希仁版本)第8章

元文件就是一种非常小的文件&#xff0c;它描述或指明其他文件的一些重要信息。这里的元文件保存了有关这个音频/视频文件的信息。 10. 流式&#xff1a;TCP&#xff1b;流式实况&#xff1a;UDP。

10秒钟docker 安装Acunetix

1、拉取镜像&#xff1a; 2、查看镜像&#xff1a; [rootdns-server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/hiepnv/acunetix latest f8415551b8f4 2 months ago 1.98GB 3、运行镜像&#xff1a; …

Redis 单线程问题 BigKey问题

前言 简单的redis基础类型以及常用操作我们都也已经介绍过了 现在今天我们来谈谈redis对于单线程是需要怎么理解的 以及redis假设遇见大key我们需要怎么去查询和删除呢??? redis单线程 假设有个人现在问你一个问题:redis是单线程的还是多线程的 这个问题本身就不严谨 就像问…

Python通过数据验证功能在Excel文件中创建下拉列表

Excel表格的灵活性和功能性深受各行各业人士的喜爱。在Excel表格中&#xff0c;下拉列表功能是提升数据录入效率与准确性的一个重要利器&#xff0c;能够为用户提供预设的选择项&#xff0c;限制输入范围&#xff0c;避免手动输入错误&#xff0c;还能够简化数据录入过程&#…

深度学习(三)

5.Functional API 搭建神经网络模型 5.1利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom…

Nginx配置详细解释:(3)http模块及server模块,location模块

目录 环境概述&#xff1a; http模块中的全局模块 1. root配置主要是对主web页面的路径访问。 2.server虚拟主机 2.1基于IP&#xff1a; 2.2基于域名&#xff1a; 3.alias别名 4.location匹配 5.access模块&#xff1a; 6.验证模块 7.自定义错误页面 8.日志存放位置…

Clearedge3d EdgeWise 5.8 强大的自动化建模软件

EdgeWise是功能强大的建模软件&#xff0c;提供领先的建模功能和先进的技术&#xff0c;让您的整个过程更快更准确&#xff01;您可以获得使用自动特征提取和对象识别的 3D 建模&#xff0c;ClearEdge3D 自动建模和对象识别软件通过创建竣工文档和施工验证完成该过程。拓普康和…

Python第二语言(七、Python模块)

目录 1. 什么是模块 2. 基本语法 2.1 模块的导入方式 2.2 基本语法 import 模块名 2.3 基本语法 from 模块名 import 功能名 2.4 基本语法as 别名 3. 自定义模块 4. 调用自定义模块时&#xff0c;如何让其模块中的函数不被调用&#xff08;__name__&#xff09; 5. 调…

【数据结构与算法】使用数组实现栈:原理、步骤与应用

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 &#x1f384;栈&#xff08;Stack&#xff09;是什么&#xff1f; &#x1…

安卓逆向经典案例——XX牛

安卓逆向经典案例——XX牛 按钮绑定方式 1.抓包 2.查看界面元素&#xff0c;找到控件id 通过抓包&#xff0c;发现点击登录后&#xff0c;才会出现Encrpt加密信息&#xff0c;所以我们通过控件找到对应id&#xff1a;btn_login 按钮绑定方法——第四种 public class LoginA…

开源规则引擎LiteFlow项目应用实践

本文介绍基于开源规则引擎LiteFlow&#xff0c;如何开发规则设计器&#xff0c;在低代码平台中集成规则引擎&#xff0c;并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求&#xff0c;所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”…

【Android面试八股文】一图展示 Android生命周期:从Activity到Fragment,以及完整的Android Fragment生命周期

图片来源于&#xff1a;https://github.com/xxv/android-lifecycle Android生命周期&#xff1a;从Activity到Fragment 图&#xff1a;android-lifecycle-activity-to-fragments.png 完整的Android Fragment生命周期 图&#xff1a;complete_android_fragment_lifecycle.png…

设置路径别名

一、描述 如果想要给路径设置为别名&#xff0c;就是常见的有些项目前面的引入文件通过开头的&#xff0c;也就是替换了一些固定的文件路径&#xff0c;怎么配置。 二、配置 import { defineConfig } from vite import react from vitejs/plugin-react import path from path…

基础数据结构 -- 堆

1. 简介 堆可以看做是一种特殊的完全二叉树&#xff0c;它满足任意节点的值都大于或小于其子节点的值。 2. 功能 插入元素&#xff1a;插入新元素时&#xff0c;先将元素放至数组末尾&#xff0c;然后通过上浮算法自底向上调整&#xff0c;使堆保持性质。删除堆顶元素&#xff…

App UI 风格,尽显魅力

精妙无比的App UI 风格

动态内存管理(malloc,calloc,realloc,free)+经典笔试题

动态内存管理 一. malloc 和 free1. malloc2. free 二. calloc三. realloc四.动态内存的错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6.动态开辟内存忘记释放&…

ROS 获取激光雷达数据(C++实现)

ROS 获取激光雷达数据&#xff08;C实现&#xff09; 实现思路 在机器人ROS系统中&#xff0c;激光雷达通常会有一个对应的节点&#xff0c;这个节点一般是由雷达的厂商提供&#xff0c;我们只需要简单的配置以下端口参数&#xff0c;就能和激光雷达的电路系统建立连接&#…

“安全生产月”专题报道:AI智能监控技术如何助力安全生产

今年6月是第23个全国“安全生产月”&#xff0c;6月16日为全国“安全宣传咨询日”。今年全国“安全生产月”活动主题为“人人讲安全、个个会应急——畅通生命通道”。近日&#xff0c;国务院安委会办公室、应急管理部对开展好2024年全国“安全生产月”活动作出安排部署。 随着科…