JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:C++ 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分C++ 编译器

1.  C++ 编译器

2.  使用 C++ 编译器

3.  使用 C++ 编译器选项

第 2 部分编写 C++ 程序

4.  语言扩展

5.  程序组织

6.  创建和使用模板

7.  编译模板

8.  异常处理

9.  改善程序性能

10.  生成多线程程序

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

13.1 预定义的 iostream

13.2 iostream 交互的基本结构

13.3 使用传统 iostream

13.3.1 使用 iostream 进行输出

13.3.1.1 定义自己的插入运算符

13.3.1.2 处理输出错误

13.3.1.3 刷新

13.3.1.4 二进制输出

13.3.2 使用 iostream 进行输入

13.3.3 定义自己的提取运算符

13.3.4 使用 char* 提取器

13.3.5 读取任何单一字符

13.3.6 二进制输入

13.3.7 查看输入

13.3.8 提取空白

13.3.9 处理输入错误

13.3.10 结合使用 iostreamstdio

13.4 创建 iostream

13.4.1 使用类 fstream 处理文件

13.4.1.1 打开模式

13.4.1.2 在未指定文件的情况下声明 fstream

13.4.1.3 打开和关闭文件

13.4.1.4 使用文件描述符打开文件

13.4.1.5 在文件内重新定位

13.5 iostream 赋值

13.6 格式控制

13.7 操纵符

13.7.1 使用无格式操纵符

13.7.2 参数化操纵符

13.8 strstream:用于数组的 iostream

13.9 stdiobuf:用于 stdio 文件的 iostream

13.10 处理 streambuf

13.10.1 streambuf 指针类型

13.10.2 使用 streambuf 对象

13.11 iostream 手册页

13.12 iostream 术语

14.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

13.4 创建 iostream

要读取或写入不是预定义的 iostream 的流,需要创建自己的 iostream。通常,这意味着创建 iostream 库中所定义类型的对象。本节讨论了可用的各种类型:

13.4.1 使用类 fstream 处理文件

处理文件类似于处理标准输入和标准输出;类 ifstreamofstreamfstream 分别从类 istreamostreamiostream 派生而来。作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。

可将文件 fstream.h 包括进来以使用任何 fstream。如果只要执行输入,请使用 ifstream;如果只要执行输出,请使用 ofstream;如果要对流执行输入和输出,请使用 fstream。将文件名称用作构造函数参数。

例如,将文件 thisFile 复制到文件 thatFile,如以下示例所示:

ifstream fromFile("thisFile");
if     (!fromFile)
    error("unable to open ’thisFile’ for input");
ofstream toFile ("thatFile");
if     (!toFile)
    error("unable to open ’thatFile’ for output");
char c;
while (toFile && fromFile.get(c)) toFile.put(c);

该代码执行以下操作:

13.4.1.1 打开模式

该模式由枚举类型 open_mode 中的 or-ing 位构造,它是类 ios 的公有类型,其定义如下:

enum open_mode {binary=0, in=1, out=2, ate=4, app=8, trunc=0x10,
     nocreate=0x20, noreplace=0x40};

注 - UNIX 中不需要 binary 标志,提供该标志是为了与需要它的系统兼容。可移植代码在打开二进制文件时要使用 binary 标志。


您可以打开文件同时用于输入和输出。例如,以下代码打开了文件 someName 用于输入和输出,同时将其连接到 fstream 变量 inoutFile

fstream inoutFile("someName", ios::in|ios::out);

13.4.1.2 在未指定文件的情况下声明 fstream

可以在未指定文件的情况下声明 fstream,并在以后打开该文件。以下示例创建了 ofstream toFile,用于写入。

ofstream toFile;
toFile.open(argv[1], ios::out);

13.4.1.3 打开和关闭文件

可以关闭 fstream,然后使用另一文件打开它。例如,要在命令行上处理提供的文件列表:

ifstream infile;
for (char** f = &argv[1]; *f; ++f) {
   infile.open(*f, ios::in);
   ...;
   infile.close();
}

13.4.1.4 使用文件描述符打开文件

如果了解文件描述符(如整数 1 表示标准输出),可以按如下方式将其打开:

ofstream outfile;
outfile.attach(1);

如果通过向 fstream 构造函数之一提供文件名或使用 open 函数来打开文件,则在通过 delete 销毁 fstream 或其超出作用域时,会自动关闭该文件。将文件 attachfstream 时,不会自动关闭该文件。

13.4.1.5 在文件内重新定位

您可以在文件中改变读取和写入的位置。有多个工具可以达到这个目的。