第五篇 输入输出处理和编程规范

    第14章 输入输出和文件

    输入和输出是人和计算机交互的手段,也是计算机的作用所在。试想,如果一台机器既不接受任何形式的指令,也不给出任何形式的结果,这台机器的存在就没有了意义。几乎每个程序都要用到输入和输出,本书给出的示例代码中,显示结果是依靠cout,输入信息是依靠cin,这两个都是C++标准库中ostream类和istream类中提供的对象,此外,C++标准库还提供了其他类和对象,不仅仅可实现向屏幕输出和从键盘读入,还可以写入文件以及从文件读入,本章重点讨论输入输出和与文件相关的内容。

    本章主要涉及以下知识点。

    ❑输出与输出:介绍输入与输出的相关知识。

    ❑高层I/O:介绍使用函数的输入与输出。

    ❑流类库:介绍C++中的流处理类。

    ❑输出流:介绍输出流中各种设置、填充和控制。

    ❑输入流:介绍输入流中各种格式、设置、填充和控制。

    ❑重载>>和<<:介绍如何对插入和抽取符进行重载。

    ❑文件操作:介绍C++中的文件操作的方法和类型。

    ❑字符串流:介绍strstream和sstream两个类族的使用。

    14.1 输入输出概述

    C++语言不具备内部输入输出能力,需要借助外部I/O包来完成,将输入输出具体要完成的操作留给编译器来做,这样做的目的是为了最大限度地保证语言与平台的无关性。因为输入输出功能都是与操作系统相关的,如果C++为某种操作系统实现内部输入输出功能,那它也就被限制在这个操作系统中了。举例来说,如果C++为Windows内部实现了输入输出命令,那么该命令就只能用在Windows环境下,在其他系统,如Linux中将完全不起作用,这大大限制了程序的可移植性。

    首先,先让我们一起来了解几个概念。

    14.1.1 什么是文件

    使用电脑时,经常会遇到“文件”这个词,通常理解为存放在存储介质上的一组信息,但从程序设计的角度来理解,文件的概念要宽泛得多。

    文件的准确定义为存放在外部介质上的以文件名为标识的数据的集合,此处的外部介质不仅仅包括磁盘还包括设备,例如键盘、显示器以及打印机等。凡是能够起到输入输出作用,与CPU直接或间接打交道的一组信息集合都是文件。

    每个文件都以文件名为标识,I/O设备的文件名是系统定义的,如下所示。

    COM1或AUX—第一串行口,附加设备

    COM2—第二串行口,此外还可能有COM3和COM4等

    CON—控制台(Console),键盘(输入用)或显示器(输出用)

    LPT1或PRN—第一并行口或打印机

    LPT2—第二并行口,还可能有LPT3等

    NUL—空设备

    磁盘文件可以由用户自己命名,但上述被系统(Windows和Dos下均是如此)保留的设备名字不能当做文件名,如不能把一个文件命名为CON(不带扩展名)或CON.TXT(即使加了扩展名也不可以)。

    本章所讨论的输入输出操作既包括对磁盘文件的读写操作,又包括对设备的输入输出操作,常常将对设备的输入输出操作称为底层输入输出。