Skip to content

文件和流

c++fstream标准库定义了三个数据类型,并且都属于std命名空间

数据类型描述
ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream该数据类型表示输入文件流,用于从文件读取信息。
fstream该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件iostreamfstream

想要对一个文件进行操作,第一件事是需要创建文件对象

c++
#include <fstream>

// 创建文件输出流对象
std::ofstream  ofs;

// 创建文件输入流对象
std::ifstream ifs;

1.打开文件

ofstreamfstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。

下面是 open() 函数的标准语法,open() 函数是 fstreamifstreamofstream 对象的一个成员。

c++
void open(const char *filename, ios::openmode mode);
  • 第一参数指定要打开的文件的名称和位置
  • 第二个参数定义文件被打开的模式,如下为参数分类,都属于std命名空间
模式标志描述
ios::app追加模式。所有写入都追加到文件末尾。
ios::ate文件打开后定位到文件末尾。
ios::in打开文件用于读取。
ios::out打开文件用于写入。
ios::trunc如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。
ios::binary以二进制方式读/写文件

以上参数可以结合使用,使用|隔开

c++
std::ofstream ofs;
ofs.open("file.dat", std::ios::out | std::ios::trunc );

简化写法

c++
std::ofstream  ofs("test.txt",std::ios::out);

1.1 判断文件是否打开

通过文件对象的is_open()方法

c++
ofstream ofs;
ofs.open("file.dat", std::ios::out | std::ios::trunc );
if (ofs.is_open()) {			// 判断文件是否打开
	std::cout<<"文件打开成功"<<std::endl;
}

2.关闭文件

当 C++ 程序终止时,它会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。

下面是 close() 函数的标准语法,close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。

c++
void close();

使用

c++
fstream fs;
fs.close();

3.写入文件

在 C++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstreamfstream 对象,而不是 cout 对象。

c++
#include <iostream>
#include <fstream>

int main() {
	std::ofstream  ofs;
	ofs.open("test.txt", std::ios::out);
	ofs << "你好" << std::endl;
	ofs.close();

	return 0;
}

TIP

在此处<<运算符意为,把运算符后面的内容写入文件流

若不指定绝对路径,文件会生成在项目的根目录

4.读取文件

在 C++ 编程中,我们使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstreamfstream 对象,而不是 cin 对象。

c++
#include <iostream>
#include <fstream>

int main() {
    // 先写入内容
	std::ofstream  ofs;
	ofs.open("test.txt", std::ios::out);
	ofs << "你好" << std::endl;
	ofs.close();

    // 再读取
	std::ifstream ifs;
	ifs.open("test.txt", std::ios::in);
	std::string str;
	ifs >> str;
	std::cout << str << std::endl;

	return 0;
}

TIP

在此处>>运算符意为,把运算符后面的内容写入一个变量

MIT Licensed