Я читаю файл .gz из какого-то медленного источника (например, FTP-сервер) и сейчас обрабатываю полученные данные. Выглядит примерно так:
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, но я понятия не имел, насколько большой будет несжатый контент.
Читая файл построчно, я хорошо знаю, сколько несжатых байтов я прочитал, но я не знаю, как это связано с размером сжатого файла.
Итак, есть ли способ узнать от GZipStream, как далеко указатель файла продвигается в сжатый файл? Мне нужна только текущая позиция, размер файла gz, который я могу получить перед чтением файла.