我正在尝试编写一个从文件向后读取字节的函数。我确切地知道它应该如何工作但是因为我刚开始用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;
}
答案 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
。
其次,最好避免这么多系统调用。而不是逐字节读取,读取完整缓冲区或一些合理的大小,然后在内存中反转缓冲区。