Ich lese eine .gz-Datei von einer langsamen Quelle (z. B. FTP-Server) und verarbeite die empfangenen Daten sofort. Das sieht in etwa so aus:
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)
{
...
}
}
Mein Problem ist die Anzeige eines genauen Fortschrittsbalkens. Im Voraus kann ich die Größe der komprimierten .gz-Datei ermitteln, aber ich habe keine Ahnung, wie groß der Inhalt unkomprimiert sein würde. Wenn ich die Datei Zeile für Zeile lese, weiß ich ziemlich genau, wie viele unkomprimierte Bytes ich lese, aber ich weiß nicht, wie sich das auf die Größe der komprimierten Datei bezieht.
Gibt es also eine Möglichkeit, von GZipStream zu erfahren, wie weit der Dateizeiger in der komprimierten Datei fortgeschritten ist? Ich brauche nur die aktuelle Position, die gz-Dateigröße, die ich vor dem Lesen der Datei abrufen kann.