📜  C++ 中的文件对象(1)

📅  最后修改于: 2023-12-03 15:13:58.881000             🧑  作者: Mango

C++ 中的文件对象

C++ 中的文件对象指的是 fstreamifstreamofstream 这三个类,它们提供了对文件进行读写的方法和相关操作。

打开文件

使用文件对象操作文件前,需要先打开文件。文件可以打开为输入文件(读取)、输出文件(写入)和输入/输出文件(读取和写入)。打开文件需要指定文件名和打开方式(读、写、追加等)。

打开方式

打开文件时,需要指定打开方式。常见的打开方式有:

  • ios::in:以输入方式打开文件(读取)
  • ios::out:以输出方式打开文件(写入)
  • ios::binary:以二进制方式打开文件
  • ios::trunc:打开文件时清空文件
  • ios::ate:打开文件时直接定位到文件末尾
  • ios::app:以追加方式打开文件

这些打开方式可以组合使用,如:

fstream file("example.txt", ios::in | ios::out);

打开一个名为 example.txt 的文件,以读取和写入方式。

打开文件流

使用 fstreamifstreamofstream 类可以打开文件流。它们分别用于文件的输入、输出和输入/输出。

  • fstream:同时支持读写
  • ifstream:支持读取文件
  • ofstream:支持写入文件
fstream file("example.txt", ios::in | ios::out);
if (!file.is_open()) {
    cout << "文件打开失败" << endl;
    return 1;
}
// 文件操作
file.close();
文件读写操作

文件对象提供了几个方法,用于对文件进行操作。

写入文件

使用 ofstream 对象可以将数据写入文件中。使用 ofstream 对象,需要调用 open() 方法打开文件并打开文件流。

ofstream file("example.txt");
if (!file.is_open()) {
    cout << "文件打开失败" << endl;
    return 1;
}

file << "Hello, World!" << endl;
file << "This is a example." << endl;

file.close();

上述代码将 Hello, World!This is a example. 两行文本写入到 example.txt 文件中。

读取文件

使用 ifstream 对象可以从文件中读取数据。同样需要调用 open() 方法打开文件并打开文件流。

ifstream file("example.txt");
if (!file.is_open()) {
    cout << "文件打开失败" << endl;
    return 1;
}

string line;
while (getline(file, line)) {
    cout << line << endl;
}

file.close();

上述代码将 example.txt 文件中的每一行输出到控制台上。

读写文件

使用 fstream 对象同时支持读取、写入文件。需要指定打开文件的方式:

fstream file("example.txt", ios::in | ios::out);
if (!file.is_open()) {
    cout << "文件打开失败" << endl;
    return 1;
}

// 向文件中写入内容
file << "Hello, World!" << endl;

// 将文件指针定位到文件开头
file.seekg(0, ios::beg);

// 从文件中读取内容
string line;
while (getline(file, line)) {
    cout << line << endl;
}

file.close();

上述代码将 Hello, World! 写入 example.txt 文件中,并读取文件的内容输出到控制台上。

文件指针操作

使用文件指针可以定位到文件的某个位置进行读取或写入操作。

可以使用 seekg() 方法定位输入文件的位置,使用 seekp() 方法定位输出文件的位置。

指针的偏移量是相对于指定的位置,如:

  • ios::beg:从文件开头计算偏移
  • ios::end:从文件末尾计算偏移
  • ios::cur:从当前位置计算偏移
fstream file("example.txt", ios::in | ios::out);
if (!file.is_open()) {
    cout << "文件打开失败" << endl;
    return 1;
}

string line;
// 读取第一行
getline(file, line);

// 将文件指针定位到第一行结尾,并向文件中写入内容
file.seekp(line.length(), ios::cur);
file << "- Appended Text" << endl;

file.close();

上述代码读取文件的第一行,将文件指针定位到第一行结尾,并向文件中追加了一行文本。

文件状态

使用 eof() 方法可以判断是否到达文件的末尾,使用 fail() 方法可以判断文件是否读写出错。

ifstream file("example.txt");
if (!file.is_open()) {
    cout << "文件打开失败" << endl;
    return 1;
}

string line;
while (getline(file, line)) {
    cout << line << endl;
}

if (file.eof()) {
    cout << "到达文件结尾" << endl;
} else if (file.fail()) {
    cout << "文件读取出错" << endl;
}

file.close();

上述代码读取文件的每一行,然后判断文件是否到达了末尾或者出错。

总结

C++ 中的文件对象提供了对文件进行读写的方法和相关操作。它们是 fstreamifstreamofstream 类。打开文件时需要指定打开方式,在进行读写操作前需要先打开文件流。使用文件指针可以对文件进行定位操作。使用文件状态方法可以判断文件是否读写完成或出错。