文件和流
c++的fstream标准库定义了三个数据类型,并且都属于std命名空间
| 数据类型 | 描述 |
|---|---|
| ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
| ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
| fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件iostream和fstream。
想要对一个文件进行操作,第一件事是需要创建文件对象
c++
#include <fstream>
// 创建文件输出流对象
std::ofstream ofs;
// 创建文件输入流对象
std::ifstream ifs;1.打开文件
ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。
下面是 open() 函数的标准语法,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。
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++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 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++ 编程中,我们使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstream 或 fstream 对象,而不是 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
在此处>>运算符意为,把运算符后面的内容写入一个变量
