// 以写模式打开文件   ofstream outfile;   outfile.open("afile.dat");   cout << "Writing to the file" << endl;   cout << "Enter your name: ";   cin.getline(data, 100);   // 向文件写入用户输入的数据   outfile << data << endl;   cout << "Enter your age: ";   cin >> data;   cin.ignore();     // 再次向文件写入用户输入的数据   outfile << data << endl;   // 关闭打开的文件   outfile.close();   // 以读模式打开文件   ifstream infile;   infile.open("afile.dat");   cout << "Reading from the file" << endl;   infile >> data;   // 在屏幕上写入数据   cout << data << endl;     // 再次从文件读取数据,并显示它   infile >> data;   cout << data << endl;   // 关闭打开的文件   infile.close();   return 0;}

当上面的代码被编译和执行时,它会产生下列输入和输出:

$./a.outWriting to the fileEnter your name: ZaraEnter your age: 9Reading from the fileZara9

上面的实例中使用了 cin 对象的附加函数,比如 getline()函数从外部读取一行,ignore() 函数会忽略掉之前读语句留下的多余字符。

文件位置指针

istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数。这些成员函数包括关于 istream 的 seekg("seek get")和关于 ostream 的 seekp("seek put")。

seekg 和 seekp 的参数通常是一个长整型。第二个参数可以用于指定查找方向。查找方向可以是 ios::beg(默认的,从流的开头开始定位),也可以是 ios::cur(从流的当前位置开始定位),也可以是 ios::end(从流的末尾开始定位)。

文件位置指针是一个整数值,指定了从文件的起始位置到指针所在位置的字节数。下面是关于定位 "get" 文件位置指针的实例:

// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)fileObject.seekg( n ); // 把文件的读指针从 fileObject 当前位置向后移 n 个字节fileObject.seekg( n, ios::cur ); // 把文件的读指针从 fileObject 末尾往回移 n 个字节fileObject.seekg( n, ios::end ); // 定位到 fileObject 的末尾fileObject.seekg( 0, ios::end );