cpp►文件和流
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpp►文件和流相关的知识,希望对你有一定的参考价值。
我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。
从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:
数据类型 | 描述 |
---|---|
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
打开文件
open()
函数是fstream、ifstream、ofstream对象的一个成员:
void open(const char *filename, ios::openmode mode);
模式标志 | 描述 |
---|---|
ios:app | 追加模式。所有写入都追加到文件末尾 |
ios::ate | 文件打开后定位到文件末尾。 |
ios::in | 打开文件用于读取。 |
ios::out | 打开文件用于写入。 |
ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
ios::binary | 以二进制模式读写。 |
如果想以写入模式打开文件,并希望截断文件,以防止文件已存在:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc);
如果想打开一个文件用于读写:
ifstream afile;
afile.open("file.dat", ios::out | ios::in);
关闭文件
close()
函数是fstream、ifstream、ofstream对象的一个成员。
void close();
写入文件
在 C++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 cout 对象。
读取文件
在 C++ 编程中,我们使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstream 或 fstream 对象,而不是 cin 对象。
读写示例
#include <fstream>
#include <iostream>
using namespace std;
int main() {
char data[100];
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();// Skip over remaining newline
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;
}
根目录下生成的afile.dat文件内容如下:
Writing to the file...
Enter your name: |Zara<Enter>
Enter your age: |9<Enter>
Reading from the file...
Zara
9
文件位置指针
istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数。这些成员函数包括关于 istream 的 seekg
(“seek get”)和关于 ostream 的 seekp
(“seek put”)。
seekg 和 seekp 的参数通常是一个长整型。第二个参数可以用于指定查找方向。查找方向可以是 ios::beg
(默认的,从流的开头开始定位),也可以是 ios::cur
(从流的当前位置开始定位),也可以是 ios::end
(从流的末尾开始定位)。
// 定位到 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);
// read a file into memory
#include <iostream>// std::cout
#include <fstream>// std::ifstream
int main() {
std::ifstream is("afile.dat", std::ifstream::binary);
if (is) {
is.seekg(0, is.end);// get length of file
int length = is.tellg();
is.seekg(0, is.beg);
char* buffer = new char[length];// allocate memory
is.read(buffer, length);// read data as a block
is.close();
std::cout.write(buffer, length);// print content
delete[] buffer;
}
return 0;
}
akuan
99
以上是关于cpp►文件和流的主要内容,如果未能解决你的问题,请参考以下文章