C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01

news2024/9/28 17:24:12

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01

文章目录

  • C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01
  • 17.4 文件输入和输出
  • 17.4.1 简单的文件 1/0
  • 程序清单17.16 fileio.cpp


17.4 文件输入和输出

大多数计算机程序都使用了文件。字处理程序创建文档文件;数据库程序创建和搜索信息文件;编译器读取源代码文件并生成可执行文件。文件本身是存储在某种设备(磁带、光盘、软盘或硬盘)上的一系列字节。通常,操作系统管理文件,跟踪它们的位置、大小、创建时间等。除非在操作系统级别上编程,否则通常不必担心这些事情。需要的只是将程序与文件相连的途径、让程序读取文件内容的途径以及让程序创建和写入文件的途径。重定向(本章前面讨论过)可以提供一些文件支持,但它比显式程序中的文件IO的局限性更大。另外,重定向来自操作系统,而非C++,因此并非所有系统都有这样的功能。本书前面简要地介绍过文件IO,本章将更详细地探讨这个主题。
C++ IO 类软件包处理文件输入和输出的方式与处理标准输入和输出的方式非常相似。要写入文件,需要创建一个 ofstrcam 对象,并使用ostream方法,如<<插入运算符或 wrie()。要读取文件,需要创建一个ifstream 对象,并使用istream 方法,如>>抽取运算符或 get()。然而,与标准输入和输出相比,文件的管理更为复杂。例如,必须将新打开的文件和流关联起来。可以以只读模式、只写模式或读写模式打开文件。写文件时,可能想创建新文件、取代旧文件或添加到旧文件中,还可能想在文件中来回移动。为帮助处理这些任务,C++在头文件ftream(以前为fstream.h)中定义了多个新类,其中包括用于文件输入的ifstream 类和用于文件输出的 ofstream类。C++还定义了一个ftream类,用于同步文件 IO。这些类都是从头文件 iostream 中的类派生而来的,因此这些新类的对象可以使用前面介绍过的方法。

17.4.1 简单的文件 1/0

要让程序写入文件,必须这样做:

  • 1.创建一个 ofstream 对象来管理输出流:
  • 2.将该对象与特定的文件关联起来;
  • 3.以使用cout的方式使用该对象,唯一的区别是输出将进入文件,而不是屏幕。要完成上述任务,首先应包含头文件ftream。对于大多数(但不是全部)实现来说,包含该文件便自动包括iostream 文件,因此不必显示包含iostream。然后声明一个ofstream 对象:
ofstream fout;//create an ofstream obiect named fout

对象名可以是任意有效的C++名称,如fout、outFile、cgate 或 didi。接下来,必须将这个对象与特定的文件关联起来。为此,可以使用open()方法。例如,假设要打开文件iar.txt 进行输出,则可以这样做:

fout.open("jar.txt");//associate fout with jar.txt

可以使用另一个构造函数将这两步(创建对象和关联到文件)合并成一条语句:

ofstream fout("jar.txt");// create fout object, associate it with jar.txt

然后,以使用cout的方式使用fout(或选择的其他名称)。例如,要将Dul Data 放到文件中,可以这样做:

fout << "Dull Data";

由于 ostream 是 ofstream 类的基类,因此可以使用所有的 ostream方法,包括各种插入运算符定义、格式化方法和控制符。ofstream 类使用被缓冲的输出,因此程序在创建像fut 这样的 ofstream 对象时,将为输出缓冲区分配空间。如果创建了两个ofstream 对象,程序将创建两个缓冲区,每个对象各一个。像fou这样的 ofstrcam 对象从程序那里逐字节地收集输出,当缓冲区填满后,它便将缓冲区内容一同传输给目标文件。由于磁盘驱动器被设计称以大块的方式传输数据,而不是逐字节地传输,因此通过缓冲可以大大提高从程序到文件传输数据的速度。
以这种方式打开文件来进行输出时,如果没有这样的文件,将创建一个新文件;如果有这样的文件,则打开文件将清空文件,输出将进入到一个空文件中。本章后面将介绍如何打开已有的文件,并保留其内容,
警告:以默认模式打开文件进行输出将自动把文件的长度截短为零,这相当于删除已有的内容
读取文件的要求与写入文件相似:
创建一个 ifstream 对象来管理输入流:
将该对象与特定的文件关联起来:
以使用cin 的方式使用该对象。
上述读文件的步骤类似于写文件。首先,当然要包含头文件ftream。然后声明一个ifstream 对象,将它与文件名关联起来。可以使用一两条语句来完成这项工作:

//two statements
ifstream fin;//create ifstream object called fin
fin.open("jellyjar.txt");//open jellyjar.txt for reading//one statement
ifstream fis("jamjar.txt");// create fis and associate with jamjar.txt

现在,可以像使用cin那样使用fin或s。例如,可以这样做:

char ch;
fin >>ch;
//read a character from the jellyjar.txt file
char buf[80];
fin >> buf;// read a word from the file
fin.getline(buf,80);//read a line from the file
string line;
getline(fin,line);//read from a file to a string obiect

输入和输出一样,也是被缓冲的,因此创建 ifstream 对象与 fn 一样,将创建一个由 fin 对象管理的输入缓冲区。与输出一样,通过缓冲,传输数据的速度比逐字节传输要快得多。
当输入和输出流对象过期(如程序终止)时,到文件的连接将自动关闭。另外,也可以使用cIose()方法来显式地关闭到文件的连接:

fout.close();
fin.close();
//close output connection to file//close input connection to file

关闭这样的连接并不会删除流,而只是断开流到文件的连接。然而,流管理装置仍被保留。例如,fin对象与它管理的输入缓冲区仍然存在。您稍后将知道,可以将流重新连接到同一个文件或另一个文件。
我们来看一个简短的例子。程序清单17.16的程序要求输入文件名,然后创建一个名称为输入名的文件,将一些信息写入到该文件中,然后关闭该文件。关闭文件将刷新缓冲区,从而确保文件被更新。然后程序打开该文件,读取并显示其内容。注意,该程序以使用cin和cout的方式使用fn和fout。另外,该程序将文件名读取到一个 string对象中,然后使用方法cst()来给 ofstream和 ifstream 的构造函数提供一个C-风格字符串参数。

程序清单17.16 fileio.cpp

// fileio.cpp -- saving to a file
#include <iostream> // not needed for many systems
#include <fstream>
#include <string>

int main()
{
    using namespace std;
    string filename;

    cout << "Enter name for new file: ";
    cin >> filename;

// create output stream object for new file and call it fout
    ofstream fout(filename.c_str());

    fout << "For your eyes only!\n";        // write to file
    cout << "Enter your secret number: ";   // write to screen
    float secret;
    cin >> secret;
    fout << "Your secret number is " << secret << endl;
    fout.close();           // close file

// create input stream object for new file and call it fin
    ifstream fin(filename.c_str());
    cout << "Here are the contents of " << filename << ":\n";
    char ch;
    while (fin.get(ch))     // read character from file and
        cout << ch;         // write it to screen
    cout << "Done\n";
    fin.close();
    // std::cin.get();
    // std::cin.get();
    return 0; 
}

在这里插入图片描述
如果查看该程序所在的目录,将看到一个名为pythag的文件,使用文本编辑器打开该文件,其内容将
与程序输出相同。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

商家转账到零钱分销返佣申请方案及驳回处理办法

分销返佣场景是商家申请最多的场景&#xff0c;因而申请被驳回也是最多的&#xff0c;根据我们上万次成功开通商家转账到零钱的经验&#xff0c;当商家转账到零钱的分销返佣场景被驳回时&#xff0c;按照以下步骤&#xff0c;商家都可以快速过审&#xff1a; 一、分析驳回原因 …

C Primer Plus 第6章——第一篇

你该逆袭了 第6章:重点摘录 零、本章内容介绍一、while 循环1、程序注释&#xff08;1&#xff09;伪代码 2、C 风格读取循环 二、while 语句1、终止 while 循环2、语法要点 三、用 关系运算符 和 表达式 比较大小1、fabs( ) 函数 比较 浮点数(1) fabs( ) 函数 2、什么是 真&am…

世界人口过亿的一级行政区分布

世界国人口已经突破80亿&#xff0c;人口过亿的国家也有14个&#xff0c;分别是中国、俄罗斯、巴西、墨西哥&#xff0c;美国、日本、印度、巴基斯坦、印度尼西亚、尼日利亚、孟加拉国、埃塞俄比亚、菲律宾、埃及。 那么作为国家的一级行政区人口过亿的区域有那些呢?这里就来…

返璞归真:通过简化用例来简化用户界面01

Larry Constantine 著harvey 译 我们常被问及精简那些最简化、抽象和通用窗体用例的重要性。到底有多重要呢&#xff1f;在以用户为 中心的设计中&#xff0c;简化那些重要窗体的用例是获得成功的关键。它能够为开发者设计优秀的用户界面 助一臂之力。通过消除不必要的或技术驱…

书籍推荐-给数字化、PLM制造从业同行推荐的几本书

基础入门和提升的书籍&#xff1a; 1.《制造企业的产品数据管理--原理、概念、策略》&#xff0c;作者&#xff1a;[德]约瑟夫萧塔纳著&#xff0c;祁国宁译 这是一本很基础&#xff0c;但是也非常经典的企业实施PDM管理价值和方法的书籍&#xff0c;大概出版于2001年&#x…

@Component 注解高端玩法【策略模式】

优质博文&#xff1a;IT-BLOG-CN 在Spring框架中&#xff0c;Component注解本身并不支持直接通过注解参数来定义一个key值。不过&#xff0c;你可以通过自定义注解和Qualifier注解来实现类似的功能。 以下是一个示例&#xff0c;展示如何通过自定义注解和Qualifier来实现将不同…

芯片行业ERP相比于传统ERP到底有什么区别

在数字化发展时代&#xff0c;ERP系统已成为企业管理和运营的重要工具。然而&#xff0c;在高度正规化的芯片行业中&#xff0c;传统ERP系统往往难以满足其独特的业务需求。本文将带大家一起来探讨芯片行业ERP与传统ERP之间的主要区别。 1. 专业化与定制化需求 芯片行业ERP系统…

【教资 · 科目二】教育知识与能力

【教资 科目二】教育知识与能力 官网&#xff1a;https://ntce.neea.edu.cn/ ‍ 题型 教育学&#xff1a;1、2、3、7、8&#xff08;前&#xff09; 心理学&#xff1a;4、5、6、8&#xff08;后&#xff09; ​ ​ 黄色&#xff1a;重点 蓝色&#xff1a;次重点 灰色…

C++商店管理系统

代码中使用了C11的特性 后面有些输出(cout输出的)的提示文本是英文&#xff0c;因为懒得敲中文 源码在最后面 文末投票参与一下谢谢 商品数据保存在 items.txt 用户数据保存在 users.txt 实现功能 1.添加商品&#xff08;商品ID,商品名&#xff0c;库存数量&#xff0c;价格&a…

卓越运营必备神器:规划复杂项目、使用标准的项目模板,看Minitab Workspace!

可确保过程与产品卓越性的可视化工具 您是否知道Minitab Workspace是专门为Minitab统计软件配套而设计的&#xff1f; 您和您的团队或许会面临以下相关问题: 1) 在规划复杂项目上存在困难&#xff0c;如业务优化项目; 2) 因完成工作需要而使用多种未知品牌的产品; 3) 缺乏…

Python 设计模式之抽象工厂模式

文章目录 从一个例子谈起抽象工厂模式的组件构成根据抽象工厂模式实现抽象工厂模式的缺点 抽象工厂模式属于创建型设计模式&#xff0c;一般用来创建复杂的对象&#xff0c;这种对象由许多小对象组成&#xff0c;这些小对象都属于某个特定的类别。 从一个例子谈起 常见的例子是…

springboot企业人力资源管理系统-计算机毕业设计源码29005

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

【Windows 11 】Missing Customize FOlder OPtion 文件夹右键自定义消失

突然发现win11 无法修改文件夹的默认图标原来是因为没有自定义选项了。微软有人问&#xff0c;大神解决了这个问题 右键缺少的是自定义这个标签 自定义长这样子&#xff1a; HKEY_CLASSES_ROOT\Directory\shellex\PropertySheetHandlers 下已经有了 {ef43ecfe-2ab9-4632-bf21…

uniapp 让同一个子组件重新加载

给子组件添加不同的 “key” 值&#xff0c;当 key 值改变时&#xff0c;Vue 会认为这是一个不同的组件&#xff0c;并重新创建它

C语言——贪吃蛇游戏

用c语言在window环境的控制台中模拟写出贪吃蛇小游戏。 一.要实现的基本的功能 如下&#xff1a; 贪吃蛇的地图绘制 贪吃蛇吃食物的功能&#xff08;方向控制蛇的动作&#xff09; 贪吃蛇撞墙死亡判断 贪吃蛇撞自己死亡判断 计算得分 贪吃蛇的速度 暂停游戏 二 贪吃蛇的铺垫准…

【HTML入门】第二十二课 - 【实战】做一个注册页面

这一小节&#xff0c;我们继续纯HTML标签的使用&#xff0c;这一节我们做一个 注册页面。说到注册页面&#xff0c;其实大家的网站都大同小异&#xff0c;所以我们就不四处去找设计图了&#xff0c;我们自己想一个注册页面&#xff0c;想想注册页面都应该有哪些元素&#xff0c…

探究全局代理是什么?有什么作用?

今天&#xff0c;我们来聊聊一个经常被提及但很多人不太了解的概念——全局代理。那么&#xff0c;全局代理到底是什么&#xff1f;它有什么用&#xff1f;以及如何正确使用呢&#xff1f;接下来&#xff0c;小编就带大家一探究竟&#xff01; 什么是全局代理&#xff1f; 通俗…

360联合国内15个最强大模型推出“AI助手”碾压GPT4o!全球首部《人工智能法案》正式生效!|AI日报

文章推荐 GPT-4o版「Her」终于来了&#xff01;英伟达股价两周内下跌23%&#xff01;&#xff5c;AI日报 Apple Intelligence将在今年10月推出&#xff1f;AI毛绒玩具BubblePal回答人类幼崽十万个为什么&#xff01;&#xff5c;AI日报 今日热点 360放大招&#xff1a;联合…

Rodin来袭,AI建模再填猛将

AI建模&#xff0c;AI绘图&#xff0c;Rodin,人工智能&#xff0c;Stable Diffusion, Stable Diffusion,midjourney,Bing AI等人工智能在绘图界掀起腥风血雨&#xff0c;外界一致认为将取代原画师&#xff0c;但是真正的原画师却感觉良好&#xff0c;他们认为&#xff1a;“AI…

Unable to clear output directory

Bug信息 Exception in thread "main" java.io.IOException: Unable to clear output directory hdfs://xxx/warehouse/hive/xx.db/xxx prior to writing to itat org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.deleteMatchingPart…