遅いソース(FTPサーバーなど)から.gzファイルを読み取っていて、受信したデータをすぐに処理しています。次のようになります。
FtpWebResponse response = ftpclientRequest.GetResponse() as FtpWebResponse;
using (Stream ftpStream = response.GetResponseStream())
using (GZipStream unzipped = new GZipStream(ftpStream, CompressionMode.Decompress))
using (StreamReader linereader = new StreamReader(unzipped))
{
String l;
while ((l = linereader.ReadLine()) != null)
{
...
}
}
私の問題は、正確なプログレスバーを表示することです。事前に圧縮された.gzファイルサイズを取得できますが、コンテンツが圧縮解除される大きさはわかりませんでした。ファイルを1行ずつ読み取る非圧縮バイトの数はよくわかっていますが、これが圧縮ファイルのサイズとどのように関係しているかはわかりません。
それで、GZipStreamからファイルポインタが圧縮ファイルにどれだけ進んでいるかを取得する方法はありますか?現在の位置、ファイルを読み取る前にフェッチできるgzファイルサイズのみが必要です。