首页 > 解决方案 > 从文件中读取大内容并将该内容写入新文件

问题描述

我编写了代码来读取大文件内容并将该内容写入新文件。

该代码适用于中小型文件内容,但对于大约 1.8GB 及以上的大文件内容,它不起作用,并且在运行时给我一个未知的错误/异常。

另外,我尝试过调试,调试结果如下:

编码:

char * myClass::getFileContent(const char * fileName) {
    std::ifstream file(fileName, std::ios::binary|std::ios::ate);
    if (!file.is_open()) {
        perror(strerror(errno));
        return "";
    }
    char * strBuffer = NULL;
    long long length = file.tellg();
    strBuffer = new char[length];
    file.seekg(0, std::ios::beg);
    file.read(strBuffer, length);
    return strBuffer;
}

// The implementation
char *fileName = "C:\\desktop-amd64.iso";
char *fileContent = myClass.getFileContent(fileName);
ofstream file("c:\\file.iso", ios::binary);
if (file.is_open()) {
    file.write(fileContent, myClass.getFileSize(fileName));
    file.close();
}
delete fileContent;

注意:我在 Windows 7 x64 上使用 Visual Studio 2015。

为什么大文件会出现这个问题?

标签: c++fileread-write

解决方案


调试器显示该std::bad_alloc行发生异常

strBuffer = new char[length];

您似乎正在尝试在内存中分配一个大小与您尝试读取的文件相同的块。由于文件的大小约为 1.8 GB,因此操作系统可能无法在内存中分配具有该大小的块。

我建议阅读这个关于处理大文件而不将所有内容存储在内存中的答案。


推荐阅读