Ubuntu 12.04 x86_64 で C++ 用の Qt 5.1.1 で QuaZIP 0.5.1 を使用しています。
私のプログラムは、gzip で圧縮された大きなバイナリ ファイル (通常は 1 GB 以上の圧縮されていないデータ) を読み取り、その上でいくつかの計算を行います。計算量は多くなく、ほとんどの時間は I/O で渡されます。そのため、ファイルのデータの読み取り量を報告する方法を見つけることができれば、進行状況バーで報告し、ETA の見積もりを提供することもできます。
私はファイルを開きます:
QuaGzipFile gzip(fileName);
if (!gzip.open(QIODevice::ReadOnly))
{
// report error
return;
}
ただし、QuaGzipFile には、ファイル サイズや現在の位置を見つける機能はありません。
非圧縮ストリームのサイズと位置を見つける必要はありません。進行状況の大まかな見積もりで十分なので、圧縮ストリームのサイズと位置は問題ありません。
現在、を使用して、圧縮ファイルのサイズを見つけることができますQFile(fileName).size()
。また、の戻り値の合計を保持することで、圧縮されていないストリーム内の現在の位置を簡単に見つけることができますgzip.read()
。しかし、これら 2 つの数値は一致しません。
必要に応じて、QuaZIP ライブラリを変更し、内部の zlib 関連のものにアクセスできます。