Я использую следующий код для распаковки GZipStream (используя библиотека DotNetZip ), где fs - это файловый поток, указывающий на файл gz (с FileMode.Open, FileAccess.Read, FileShare.ReadWrite):
using (var gz = new GZipStream(fs, CompressionMode.Decompress)) {
using (var sr = new StreamReader(gz)) {
header = sr.ReadLine();
}
}
Но если файл не читается до конца (что я предпочитаю делать, когда он не нужен, так как файл может быть огромным), он выдает
ZlibException("Bad CRC32 in GZIP trailer. (actual(EC084966)!=expected(8FC3EF16))")
в первой закрывающей скобке (на самом деле при попытке закрыть () StreamReader.
Теперь, если вызов ReadToEnd () перед закрытием потокового читателя (или я читаю все строки, используя некоторое время (! Sr.EndOfStream))цикл), он работает. Я наблюдал такое же поведение со сжатым файлом размером 500 МБ и 200 КБ, поэтому кажется, что он не связан с размером файла.
Ваше понимание очень приветствуется!
Вот ссылка на простой выделенный тестовый проект .
Он работает с библиотекой System.IO.GZipStream, так что это очень странно.