2017-02-01 16 views
0

バイナリのzipファイルの一部(読み込み位置とバイト数)を探しています。現在私はWindows上でこれを調べていますが、プラットフォームに依存しないことが最適です。通常のバイナリファイル(解凍)のために、これは以下のように達成することができる。バイナリzipファイルの一部のみを読み取る

//Open the file 
std::ifstream file (path, std::ios::in | std::ios::binary | std::ios::ate); 

//Move to the position to start reading 
file.seekg(64); 

//Read 128 bytes of the file 
std::vector<unsigned char> mDataBuffer; 
mDataBuffer.resize(128) ; 
file.read((char*)(&mDataBuffer[0]), 128) ; 

//Read as string 
std::string s_data(mDataBuffer.begin(), mDataBuffer.end()); 

file.close() 

この例ではthis oneのわずかに修正されたバージョンです。

利用可能なパッケージ(zlibやminizipなど)も多数あります。それぞれのカバーは、ファイルを解凍する機能を持っています。私は単に、私のzipファイルを解凍し、ディスクに保存し、上の方法でそれを読むことができます。

残念ながら、zipファイルから直接バイナリのzipファイルの一部だけを読み取る例は見つかりませんでした(それが可能であれば)。私のファイルはかなり大きいので、私はを完全にのハードドライブに解凍したくありません。さらに、読みたい部分がかなり小さいので、ファイルを完全に解凍するのはCPU時間の無駄です。同様の理由から、私はファイルを私の記憶に伸張したくない。私は、部分のzipファイルのみを読むための本物の方法を探しています。

これはどのようにしてC++で達成できますか?

+0

圧縮ファイルのpart_は何を表していますか? –

+0

通常のバイナリファイル(問題の修正)のシークの開始位置と終了位置 – takje

+0

アーカイブから1つのファイルを抽出することになっていますか?それは重要ではありませんが、私はまだあなたのためにそれを処理するための移植可能なライブラリを見つけることをお勧めします。 –

答えて

0

明らかにzipファイルを探す一般的な方法はありません。これは、によると:

  • @πάνταῥεcommentのコメント。
  • 一般的なジップファイル検索のスレッドhere
  • 同様の質問here(質問自体はPythonに関するものですが)。
関連する問題