输入流成员函数
输入流成员函数用于磁盘输入使用。 成员函数包括:
输入流中打开功能
获取函数
getline 功能
读取的功能
seekg 和 tellg 功能
输入流进行功能
输入流中打开功能
如果使用的输入文件流 (ifstream),则必须将该流与给定磁盘文件。 可以执行此操作在构造函数中,也可以使用 打开 功能。 在任何情况下,参数是相同的。
通常指定 ios_base:: openmode 标志,当您打开文件与输入流时 (默认模式是 ios:: 在)。 有关 open_mode 标志的列表,请参见 打开功能。 标志可以按位组合使用或 (|) 运算符。
若要读取文件,请先使用 失败 成员函数以确定它是否存在:
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
获取函数
非格式化 获取 成员函数的作用类似于 AMP_GTAMP_GT 运算符有两个异常。 首先, 获取 功能包括空白字符,,而提取器包括空白,当 skipws 标志设置为时 (默认值)。 接下来, 获取 功能不太可能导致附加的输出流 (例如,)cout刷新。
获取 功能的变体指定缓冲区地址和的最大字符数读取。 ,因为此示例显示,对于限制字符数十分有用发送到特定变量:
// ioo_get_function.cpp
// compile with: /EHsc
// Type up to 24 characters and a terminating character.
// Any remaining characters can be extracted later.
#include <iostream>
using namespace std;
int main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << line << endl;
}
输入
1234
示例输出
1234
getline 功能
getline 成员函数类似于 获取 功能。 两个函数可以为输入指定终止字符的第三个参数。 默认值为换行符。 两个功能所需的终止字符的保留一个字符。 但是, 获取 在流将终止字符保留,并 getline 取消终止字符。
下面的示例为输入流指定一终止字符:
// getline_func.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char line[100];
cout << " Type a line terminated by 't'" << endl;
cin.getline( line, 100, 't' );
cout << line;
}
输入
test
读取的功能
读取 成员函数读取字节从文件加载到内存中指定的区域。 长度参数确定读取的字节数。 如果不包含该参数,读取停止,在实际的文件结束为止; 或者在文本模式文件时,那么,当嵌入 EOF 字符读取时。
此示例读取二进制记录从工资表文件为结构:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
struct
{
double salary;
char name[23];
} employee;
ifstream is( "payroll" );
if( is ) { // ios::operator void*()
is.read( (char *) &employee, sizeof( employee ) );
cout << employee.name << ' ' << employee.salary << endl;
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
过程假定,数据记录已正确设置为指定由框架不停止或回车换行符。
seekg 和 tellg 功能
输入文件流保留内部指针到数据将接下来读取的文件的位置。 将与 seekg 功能的此指针,如下所示:
#include <iostream>
#include <fstream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
tfile.seekg( 8 ); // Seek 8 bytes in (past salary)
while ( tfile.good() ) { // EOF or failure stops the reading
tfile.get( ch );
if( !ch ) break; // quit on null
cout << ch;
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
若要使用 seekg 实现记录面向数据管理系统,请使用固定长度的记录大小以记录数获取字节位置相对于文件的末尾,然后使用 获取 对象读取该记录。
tellg 成员函数返回读取当前文档的位置。 是类型 streampos, typedef 定义的该值 iostream。 下面的示例读取文件并显示空间的位置的消息。
#include <fstream>
#include <iostream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
while ( tfile.good( ) ) {
streampos here = tfile.tellg();
tfile.get( ch );
if ( ch == ' ' )
cout << "\nPosition " << here << " is a space";
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
输入流进行功能
关闭 成员函数关闭磁盘文件与输入文件流并释放操作系统文件句柄。 ifstream 析构函数关闭您的文件,但是,您可以使用 关闭 功能,如果您需要打开相同流对象的其他文件。