输出文件流成员函数
输出流成员函数有三种类型:使用操控器等效执行非格式化写操作时),否则修改流状态并没有等效的操控程序或插入运算符的过程以及管理员。 对于顺序,格式化输出,可以使用只有插入运算符和操作者。 对于随机访问的二进制磁盘输出,则使用其他成员函数,有或没有插入运算符。
输出流中打开功能
若要使用输出文件流 (ofstream),则必须将该流与在构造函数或 打开 函数的给定磁盘文件。 如果使用 打开 功能,可以重新使用一系列文件的相同通信对象。 在任何情况下,描述文件的参数相同。
当您打开文件与输出流时,您通常指定 open_mode 标志。 可以将这些标志,按位定义为 ios 类的枚举数,使用或 (|) 运算符。 为枚举数列表 ios_base:: openmode 参见。
三种常见的输出流情况涉及模式选项:
创建文件。 如果该文件已经存在,旧版本中删除。
ostream ofile( "FILENAME" ); // Default is ios::out ofstream ofile( "FILENAME", ios::out ); // Equivalent to above
追加记录到现有文件或创建一个,如果不存在。
ofstream ofile( "FILENAME", ios::app );
打开两个文件,一个,在相同流。
ofstream ofile(); ofile.open( "FILE1", ios::in ); // Do some output ofile.close(); // FILE1 closed ofile.open( "FILE2", ios::in ); // Do some more output ofile.close(); // FILE2 closed // When ofile goes out of scope it is destroyed.
放置的功能
放置 功能写入输出流中的字符。 默认情况下以下两个语句是相同的,但是,第二是受流的 format 参数的影响:
cout.put( 'A' ); // Exactly one character written
cout << 'A'; // Format arguments 'width' and 'fill' apply
编写一个函数
写入 功能编写内存块输出文件流中。 长度参数指定编写的字节数。 此示例创建一个输出文件流和写入 Date 结构的二进制值对它:
// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
struct Date
{
int mo, da, yr;
};
int main( )
{
Date dt = { 6, 10, 92 };
ofstream tfile( "date.dat" , ios::binary );
tfile.write( (char *) &dt, sizeof dt );
}
写入 函数不停止,在到达 null 字符,因此,完整的类结构写入。 函数采用两个参数: char 指针和计数编写的字符。 请注意所需的转换为 char* 在结构对象的地址之前。
seekp 和 tellp 功能
输出文件流保留指向位置数据将随后将编写的内部指针。 seekp 成员函数将此指针从而提供随机访问的磁盘文件的输出。 tellp 成员函数返回文件的位置。 有关使用输入流等效于 seekp 和 tellp的示例,请参见 seekg 和 tellg 功能。
输出流进行功能
关闭 成员函数关闭磁盘文件与输出文件流。 必须关闭文件完成所有磁盘输出。 如果需要, ofstream 析构函数关闭您的文件,但是,您可以使用 关闭 功能,如果您需要打开相同流对象的其他文件。
,仅当构造函数或 打开 成员函数打开该文件,输出流析构函数自动关闭流的文件。 如果通过构造函数的已打开的文件的一个文件描述符或使用 附加 成员函数,必须显式关闭文件。
处理函数的错误
使用这些成员函数测试错误,则写入流时:
功能 |
返回值 |
---|---|
,如果具有不可恢复的错误,返回 true 。 |
|
返回 true ,如果具有不可恢复的错误或一个 “预期的”情况,例如转换错误,或者,如果未找到该文件。 进程可能会在调用后通常还原到具有零个参数的 清除 。 |
|
返回 true ,如果没有错误状态 (不可恢复或),并且该文件结尾未设置任何标志。 |
|
返回该文件的末尾条件的 true 。 |
|
为内部错误状态。 如果调用具有默认参数,就会清除所有错误位。 |
|
返回当前错误状态。 |
重载 ! 运算符执行函数和 失败 功能相同。 因此表达式:
if( !cout)...
等效于:
if( cout.fail() )...
重载 void* () 运算符是 ! 运算符的相反值;因此表达式:
if( cout)...
等于:
if( !cout.fail() )...
The void*() operator is not equivalent to good because it does not test for the end of file.