📜  通过C++类进行文件处理(1)

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

通过C++类进行文件处理

在C++中,文件处理是一个非常常见的任务。C++提供了基本的文件处理功能,可以通过诸如 fopen()fclose() 之类的函数来操作文件。但是,使用C++类可以更加方便,安全和高效地处理文件,因此这篇文章将介绍如何使用C++类进行文件处理。

C++文件流

在C++中,文件流是一个非常重要的概念。文件流是一种用于处理输入和输出的抽象数据类型。它可以用来从文件中读取数据,也可以用来将数据写入文件中。C++中的文件流都继承自 iostream 类,因此可以使用 <<>> 运算符进行数据的输入和输出。

C++中有3个主要的文件流:

  • ofstream:用于写入输出文件流。
  • ifstream:用于读取输入文件流。
  • fstream:涵盖了上述两种情况的文件流。
创建一个文件

使用C++类进行文件处理的第一步是创建一个文件。在C++中,可以使用 ofstream 类来创建一个输出文件流。例如,创建一个名为 example.txt 的文件,可以使用以下代码:

#include <fstream>

int main()
{
    std::ofstream out("example.txt");
    return 0;
}

在上面的代码中,我们创建了一个 ofstream 对象,并将它命名为 out,这个对象会自动创建一个名为 example.txt 的文件。

写入文件

接下来,我们来看看如何使用 ofstream 类向文件写入数据。可以使用 << 运算符将数据写入文件,例如:

#include <fstream>

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

    if (out.is_open())
    {
        out << "This is the first line." << std::endl;
        out << "This is the second line." << std::endl;
        out << "This is the third line." << std::endl;

        out.close();
    }
    else
    {
        std::cout << "Unable to open file." << std::endl;
    }

    return 0;
}

在上面的代码中,我们使用了 ofstream 类向文件写入了三行数据。为了检测程序是否成功打开了文件,我们还使用了 is_open() 函数进行检测。

读取文件

除了向文件写入数据外,我们还可以使用 ifstream 类来从文件中读取数据。可以使用 >> 运算符从文件中读取数据,例如:

#include <fstream>

int main()
{
    std::ifstream in("example.txt");

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

        in.close();
    }
    else
    {
        std::cout << "Unable to open file." << std::endl;
    }

    return 0;
}

在上面的代码中,我们使用了 ifstream 类从 example.txt 文件中读取了三行数据,并将其打印到控制台上。在这里,我们使用了 getline() 函数来读取文件中的每一行。

文件处理异常

在进行文件处理时,必须注意处理异常。异常是指在程序运行过程中发生的错误,例如无法打开文件或文件已被删除等等。C++提供了 std::exception 类,它是C++异常处理的基本类型。

为了处理文件处理异常,我们可以使用C++中的 try-catch 语句。例如,在尝试打开文件时,如果文件不存在,则会发生异常,并且会抛出 std::ifstream::failure 异常。我们可以使用以下方法来处理该异常:

#include <fstream>

int main()
{
    try
    {
        std::ifstream in("example.txt");
        
        if (in.is_open())
        {
            std::string line;
            while (std::getline(in, line))
            {
                std::cout << line << std::endl;
            }
            
            in.close();
        }
        else
        {
            throw std::ifstream::failure("Unable to open file.");
        }
    }
    catch (const std::ifstream::failure& e)
    {
        std::cout << e.what() << std::endl;
    }

    return 0;
}

在上面的代码中,我们使用了 try-catch 语句来捕获 std::ifstream::failure 异常。如果发生异常,则会将其打印到控制台上。

结论

本文介绍了如何使用C++类进行文件处理。我们学习了如何使用 ofstream 类创建文件,如何将数据写入文件,如何使用 ifstream 类从文件中读取数据,以及如何处理文件异常。C++类可以使文件处理更加方便,安全和高效。