Ich versuche eine Funktion zu schreiben, die Bytes rückwärts aus einer Datei liest. Ich weiß genau, wie es funktionieren sollte, aber seit ich mit C++ angefangen habe, weiß ich nicht, wie ich das machen soll.So lesen Sie eine bestimmte Anzahl von Bytes rückwärts vom Ende einer Datei C++
Lets sagen, dass ich eine 2 GB große Datei habe und ich die letzten 800 MB in den Systemspeicher (rückwärts) zuordnen will. Ich möchte, dass es effizient ist; Ich lade nicht die ganze Datei, da ich 1,2 GB davon nicht brauche.
Mit meinem begrenzten Wissen konnte ich dies bisher schreiben, aber ich stecke gerade fest. Sicherlich muss es viel eleganter sein, wie man das macht.
#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;
}
Warum nicht einfach 'file.seekg (-bytes_to_read, ios :: end)' zuerst, lesen Sie die 'bytes_to_read' Bytes, und rufen Sie es einen Tag? Wenn Sie die Reihenfolge der Bytes umkehren möchten, kehren Sie sie um, nachdem Sie sie gelesen haben. –
Was @SamVarshavchik sagte. Die Suche nach jedem gelesenen Byte ist eine extreme Ineffizienz. Es ist etwas, das Windows Update tun könnte. –
Ich dachte, dass es einen Weg gibt, wie man das macht, ohne diesen zusätzlichen Schritt zu machen (im Speicher umzukehren). Ich konnte alle Bytes in das Referenz-Char-Array laden, aber da es nur eine umgekehrte Funktion für Strings gibt, denken Sie, dass ich meine eigenen implementieren sollte? Gibt es einen Weg herum? – robert