目录

  1. 文件和流概述
  2. 文件操作模式
  3. 文件流的基本操作
    • 读取文件
    • 写入文件
    • 文件指针的操作
  4. 示例代码
  5. 参考资料

1. 文件和流概述

C++ 提供了强大的文件操作能力,能够通过文件流来读取和写入文件。文件流是与文件交互的接口,允许程序对文件进行输入输出操作。C++ 中的文件操作主要通过标准库中的 fstream 类来完成。

C++ 文件流提供了三种常用的流类型:

  • ifstream:输入文件流,用于读取文件中的内容。
  • ofstream:输出文件流,用于将内容写入文件。
  • fstream:双向文件流,既可以读取文件,又可以写入文件。

文件操作的基本思想是打开文件,进行相应的读写操作,最后关闭文件。流可以是二进制流或文本流,取决于打开文件时所指定的模式。


2. 文件操作模式

在使用文件流时,可以指定不同的文件操作模式。常用的模式包括:

  • ios::in:打开文件进行读取。
  • ios::out:打开文件进行写入(如果文件不存在,会创建新文件)。
  • ios::app:以追加模式打开文件,数据会被追加到文件末尾。
  • ios::binary:以二进制模式打开文件。
  • ios::ate:打开文件并定位到文件末尾,可以在写入时修改文件。
  • ios::trunc:如果文件已存在,清空文件内容。

可以通过位运算将多个模式组合起来使用,例如:

ofstream file("example.txt", ios::out | ios::app);


3. 文件流的基本操作

读取文件

读取文件内容可以通过 ifstream 类来实现。以下是如何读取文件并处理文件内容的基本步骤:

  • 打开文件
  • 检查文件是否成功打开
  • 使用 getline() 或流提取运算符(>>)读取文件内容
  • 关闭文件

写入文件

写入文件内容可以通过 ofstream 类来实现。文件内容可以通过流插入运算符(<<)进行输出。


4. 示例代码

示例:读取文件内容

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    // 创建输入文件流对象
    ifstream inputFile("example.txt");

    // 检查文件是否成功打开
    if (!inputFile) {
        cerr << "Error opening file!" << endl;
        return 1;
    }

    string line;
    // 按行读取文件
    while (getline(inputFile, line)) {
        cout << line << endl;  // 输出每一行
    }

    inputFile.close();  // 关闭文件

    return 0;
}

在这个示例中,我们使用 ifstream 打开文件 example.txt 并读取每一行,直到文件结束。

示例:写入文件内容

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 创建输出文件流对象
    ofstream outputFile("example.txt");

    // 检查文件是否成功打开
    if (!outputFile) {
        cerr << "Error opening file!" << endl;
        return 1;
    }

    // 向文件写入内容
    outputFile << "Hello, World!" << endl;
    outputFile << "This is a file write example." << endl;

    outputFile.close();  // 关闭文件

    return 0;
}

在这个示例中,我们使用 ofstream 打开文件 example.txt 并向其中写入数据。如果文件不存在,ofstream 会自动创建新文件。

示例:文件的追加操作

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 创建输出文件流对象,使用追加模式
    ofstream outputFile("example.txt", ios::app);

    // 检查文件是否成功打开
    if (!outputFile) {
        cerr << "Error opening file!" << endl;
        return 1;
    }

    // 向文件追加内容
    outputFile << "This is an appended line." << endl;

    outputFile.close();  // 关闭文件

    return 0;
}

在此示例中,我们使用 ios::app 模式打开文件,保证新的内容被追加到文件末尾,而不会覆盖文件中的现有数据。

示例:读取二进制文件

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 打开二进制文件
    ifstream inputFile("example.bin", ios::binary);

    if (!inputFile) {
        cerr << "Error opening file!" << endl;
        return 1;
    }

    // 获取文件大小
    inputFile.seekg(0, ios::end);
    streampos fileSize = inputFile.tellg();
    inputFile.seekg(0, ios::beg);

    // 读取文件内容
    char* buffer = new char[fileSize];
    inputFile.read(buffer, fileSize);

    // 输出文件内容(这里只是一个示例)
    cout << "File content: " << buffer << endl;

    // 关闭文件和释放内存
    inputFile.close();
    delete[] buffer;

    return 0;
}

在这个示例中,我们打开一个二进制文件 example.bin,读取其内容,并将其输出。使用 ios::binary 模式来打开二进制文件,seekg()tellg() 用来定位文件指针。


5. 参考资料


总结

C++ 提供了强大的文件操作功能,通过文件流(ifstreamofstreamfstream)可以非常方便地进行文件的读写操作。通过使用不同的文件打开模式和流操作函数,开发者可以灵活地处理文本文件和二进制文件。理解文件流的基本使用方法对于文件处理和数据存储非常重要。