📜  c++ 将整个文件读入变量 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:55.276000             🧑  作者: Mango

C++将整个文件读入变量

在C++中,我们可以使用一些库函数来从文件中读取数据。有时候,我们需要将整个文件读入变量中进行处理。下面介绍两种常见的方法:

方法一:使用fstream库
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    // 以文本模式打开文件
    ifstream file("test.txt");

    // 判断是否打开成功
    if (!file.is_open())
    {
        cout << "Fail to open file!" << endl;
        return 0;
    }

    // 将文件内容读入字符串
    string str((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());

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

    // 输出文件内容
    cout << str << endl;

    return 0;
}

此方法中,我们使用了ifstream库函数打开一个文本文件,在成功打开文件后,使用std::istreambuf_iterator将文件内容读入字符串中,并关闭文件。最后输出读取的内容。

方法二:使用C风格的文件读写
#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

int main()
{
    // 以只读的方式打开文件
    FILE* pFile = fopen("test.txt", "r");

    // 判断是否打开成功
    if (!pFile)
    {
        cout << "Fail to open file!" << endl;
        return 0;
    }

    // 查询文件长度
    fseek(pFile, 0, SEEK_END);
    long int size = ftell(pFile);
    fseek(pFile, 0, SEEK_SET);

    // 读取文件内容
    char* buffer = new char[size + 1];
    fread(buffer, 1, size, pFile);
    buffer[size] = '\0';

    // 关闭文件
    fclose(pFile);

    // 将内容转为字符串
    string str(buffer);

    // 输出文件内容
    cout << str << endl;

    delete[] buffer;

    return 0;
}

在此方法中,我们使用了C风格的文件读写函数fopenfclose,以及fseekftell两个函数,分别用于查询文件长度和文件指针位置。根据文件长度,我们动态分配了一个字符数组buffer,并使用fread函数将文件内容读入其中。最后将字符数组转为字符串,并输出文件内容。

上述两种方法都可以实现将整个文件读入变量,具体使用时可以根据实际需求进行选择。