白骑士的C++教学高级篇 3.1 文件操作

19 篇文章 0 订阅

系列目录

上一篇:白骑士的C++教学进阶篇 2.4 标准模板库(STL)

        文件操作是C++编程中的一个重要部分,允许程序与外部存储设备进行交互,从而实现数据的持久化存储和读取。C++标准库提供了丰富的文件操作功能,包括文件的读写、文件流和二进制文件操作。本篇博客将详细介绍这些内容,帮助您掌握C++文件操作的基本技巧。

文件的读写

        C++标准库中的文件读写通过文件流(file stream)实现。文件流分为输入文件流(ifstream)和输出文件流(ofstream),分别用于从文件读取数据和向文件写入数据。

文件写入

        首先,让我们看看如何使用‘ofstream‘类向文件写入数据。‘ofstream‘类用于创建文件并写入数据。如果文件不存在,它会创建文件;如果文件已经存在,它会覆盖文件内容。例如:

#include <iostream>
#include <fstream>
#include <string>


int main() {
    std::ofstream outFile("example.txt");

    if (outFile.is_open()) {
        outFile << "Hello, World!" << std::endl;
        outFile << "This is a test file." << std::endl;
        outFile << "C++ file operations are easy to learn." << std::endl;
        outFile.close();

        std::cout << "Data written to file successfully." << std::endl;
    } 
    
    else {
        std::cerr << "Unable to open file for writing." << std::endl;
    }

    return 0;
}

        在上面的代码中,我们使用‘ofstream‘创建了一个名为‘example.txt‘的文件,并向文件中写入了几行文本。最后关闭文件流。

文件读取

        接下来,让我们看看如何使用 ‘ifstream‘ 类从文件读取数据。‘ifstream‘ 类用于打开文件并读取数据,例如:

#include <iostream>
#include <fstream>
#include <string>


int main() {
    std::ifstream inFile("example.txt");
    std::string line;

    if (inFile.is_open()) {
        while (getline(inFile, line)) {
            std::cout << line << std::endl;
        }
        inFile.close();
    } 

    else {
        std::cerr << "Unable to open file for reading." << std::endl;
    }

    return 0;
}

        在上面的代码中,我们使用 ‘ifstream‘ 打开了一个名为 ‘example.txt‘ 的文件,并逐行读取文件内容,打印到标准输出。

文件流

        C++标准库提供了一个更通用的文件流类——‘fstream‘,它既可以用于文件读取,也可以用于文件写入。通过指定文件流的打开模式,可以实现不同的文件操作需求。

文件流的打开模式

        ‘fstream‘类的打开模式包括:

  • ios::in:打开文件用于读取。
  • ios::out:打开文件用于写入。
  • ios::app:打开文件用于追加写入。
  • ios::ate:文件打开后定位到文件末尾。
  • ios::trunc:如果文件存在,打开时清空文件内容。
  • ios::binary:以二进制模式打开文件。

示例代码

        下面的示例代码展示了如何使用‘fstream‘类同时进行文件的读写操作:

#include <iostream>
#include <fstream>
#include <string>


int main() {
    std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);

    if (file.is_open()) {
        // 写入数据
        file << "Appending a new line to the file." << std::endl;

        // 定位到文件开头
        file.seekg(0);

        // 读取数据
        std::string line;

        while (getline(file, line)) {
            std::cout << line << std::endl;
        }
        file.close();
    } 

    else {
        std::cerr << "Unable to open file." << std::endl;
    }

    return 0;
}

        在上面的代码中,我们使用 ‘fstream‘ 类打开了一个名为 ‘example.txt‘ 的文件,以读取、写入和追加模式打开文件。首先,我们向文件中追加了一行文本,然后定位到文件开头,并逐行读取文件内容,打印到标准输出。

二进制文件操作

        除了处理文本文件,C++还可以处理二进制文件。二进制文件操作通常用于存储非文本数据,如图像、音频、视频等。与文本文件不同,二进制文件的读写操作必须使用二进制模式。

二进制文件写入

        下面的示例代码展示了如何使用‘ofstream‘类以二进制模式向文件写入数据:

#include <iostream>
#include <fstream>


int main() {
    std::ofstream outFile("example.bin", std::ios::binary);

    if (outFile.is_open()) {
        int numbers[] = {1, 2, 3, 4, 5};

        outFile.write(reinterpret_cast<char*>(numbers), sizeof(numbers));
        outFile.close();

        std::cout << "Binary data written to file successfully." << std::endl;

    } 

    else {
        std::cerr << "Unable to open file for writing." << std::endl;
    }

    return 0;
}

        在上面的代码中,我们使用 ‘ofstream‘ 类以二进制模式创建了一个名为 ‘example.bin‘ 的文件,并向文件中写入了一个整数数组。‘reinterpret_cast<char*>(numbers)‘ 用于将整数数组的指针转换为字符指针,以便写入二进制数据。

二进制文件读取

        接下来,让我们看看如何使用‘ifstream‘类以二进制模式从文件读取数据,代码如下:

#include <iostream>
#include <fstream>


int main() {
    std::ifstream inFile("example.bin", std::ios::binary);

    if (inFile.is_open()) {
        int numbers[5];

        inFile.read(reinterpret_cast<char*>(numbers), sizeof(numbers));

        for (int num : numbers) {
            std::cout << num << " ";
        }

        std::cout << std::endl;

        inFile.close();
    } 

    else {
        std::cerr << "Unable to open file for reading." << std::endl;
    }

    return 0;
}

        在上面的代码中,我们使用 ‘ifstream‘ 类以二进制模式打开了一个名为 ‘example.bin‘ 的文件,并从文件中读取了一个整数数组。‘reinterpret_cast<char*>(numbers)‘ 用于将整数数组的指针转换为字符指针,以便读取二进制数据。

总结

        文件操作是C++编程中的一个重要部分,通过文件的读写、文件流和二进制文件操作,程序可以实现数据的持久化存储和读取。掌握这些基本技巧,将能够处理各种类型的文件,满足不同的编程需求。希望通过本篇博客的介绍,你能更好地理解和应用C++的文件操作,为编写复杂和高效的C++程序打下坚实的基础。

下一篇:白骑士的C++教学高级篇 3.2 多线程与并发​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值