如何从文件末尾向后读取一定数量的字节C ++

时间:2016-10-13 23:34:24

标签: c++ file

我正在尝试编写一个从文件向后读取字节的函数。我确切地知道它应该如何工作但是因为我刚开始用C ++编程我不知道该怎么做。

假设我有一个2 GB的大文件,我想将最后800 MB分配到系统内存(向后)。我希望它有效率;没有加载整个文件,因为我不需要1.2 GB。

到目前为止,由于我的知识有限,我能够写出来,但我现在被困住了。当然,必须有更优雅的方式来做到这一点。

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

using namespace std;

int main () {
    // open the file
    ifstream file;
    file.open(filename, ios_base::binary);

    //check for successful opening
    if(!file.is_open()){
        cout << "Error." << endl;
        exit(EXIT_FAILURE);
    }

    //get the lenght of a file
    file.seekg (0, file.end);
    long length = file.tellg();
    file.seekg (0, file.beg);

    //read given amount of bytes from back and allocate them to memory
    for (long i=0; i<=bytes_to_read-1; i++) {
        file.seekg(-i, ios::end);
        file.get(c);

        //allocation process

    }
    return 0;
} 

2 个答案:

答案 0 :(得分:0)

使用fseek获取您想要的位置,然后从那里读取文件。 fp是这里的文件指针。

fseek(fp, -10, SEEK_END); // seek to the 10th byte before the end of file
如果在C ++中使用iostream,则从http://beej.us/guide/bgc/output/html/multipage/fseek.html seekg

答案 1 :(得分:0)

首先有一个错误 - 您需要在循环中寻找-i-1

其次,最好避免这么多系统调用。而不是逐字节读取,读取完整缓冲区或一些合理的大小,然后在内存中反转缓冲区。