バイトをファイルから逆方向に読み込む関数を記述しようとしています。私はそれがどのように動作すべきかを正確に知っていますが、C++でプログラミングを始めたばかりなので、どうやってそれを行うのか分かりません。ファイルの末尾から一定量のバイトを読み込む方法C++
私は2GBの大きなファイルがあり、最後の800MBをシステムメモリに(後方に)割り当てたいとします。私はそれが効率的であることを望みます。私は1.2GBのファイルを必要としないので、ファイル全体をロードしないでください。
これまで私の限られた知識で私はこれを書くことができましたが、今は固執しています。確かにそれを行う方法をよりエレガントにする必要があります。
#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'バイトを読んで、それを1日と呼びますか?バイトの順序を逆にする場合は、読み込んだ後に逆にします。 –
@SamVarshavchikは言った。各バイトの読み取りを求めることは、極端な非効率性である。それはWindows Updateができるものです。 –
私は、その余分なステップ(メモリ内での逆転)をしないとそのことをどうやって行うのかという方法があると思いました。私はすべてのバイトを参照char配列にロードすることができましたが、文字列の逆関数しかないので、自分で実装するべきだと思いますか?周りに道がありますか? – robert