我正在嘗試編寫一個從文件中向後讀取字節的函數。我確切地知道它應該如何工作,但是因爲我剛開始用C++編程,所以我不知道該怎麼做。如何從文件末尾讀取一定數量的字節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;
}
爲什麼不先'file.seekg(-bytes_to_read,ios :: end)',讀取'bytes_to_read'字節,然後每天調用它?如果您想顛倒字節的順序,請在讀取它們後將其反轉。 –
@SamVarshavchik說什麼。尋找每個字節的讀取效率極低。這是Windows Update可以做的事情。 –
我認爲可能有辦法如何做到這一點,而不是做額外的步驟(扭轉它在內存中)。我能夠將所有字節加載到引用char數組中,但是因爲只有字符串的反向函數,所以您認爲我應該實現自己的字符串?有沒有辦法解決? – robert