Почему я получаю только первые несколько строк файла при использовании GZipStream для распаковки в ядре dotnet - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь прочитать серию gzip-файлов, используя приведенный ниже код.

В результате я получаю файл, который составляет лишь часть общего файла.Интересно, что вывод текстового файла практически идеально обрезается при переносе строки.

public static string UnzipFile(string filename)
{
    FileInfo fi = new FileInfo(filename);
    Console.WriteLine($" - - - - - UnzipFile {filename} {fi.Length} - - - - - ");
    string newFileName = filename.Substring(0, filename.Length - 4);

    try
    {
       byte[] buffer = new byte[4096]; // read in chunks of 4KB
       using (FileStream fs2 = new FileStream(newFileName, FileMode.CreateNew))
       {
          using (FileStream fs = new FileStream(filename, FileMode.Open))
          {
             using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Decompress))
             {
                zipStream.BufferSize = 1024;
                int bytesRead;
                while((bytesRead = zipStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                   Console.WriteLine($" {bytesRead}  ");
                   fs2.Write(buffer, 0, bytesRead);
                   fs2.Flush(true);
                }          
             }           
         }
      }
      FileInfo fi2 = new FileInfo(newFileName);
      Console.WriteLine($" - - - - {newFileName} {fi2.Length}");
      }
      catch (Exception e)
      {
         Console.WriteLine($" - - - - - EXCEPTION {e.Message} {e.StackTrace}");
      }
      return newFileName;
 }

Вот частичный вывод при запуске кода:

UnzipFile : 177686_2018-10-18_0#289.json.gz 34975
4096
4096
 855
            177686_2018-10-18_0#289.json 9047

Так что это выглядит как файл размера34975 байт при сжатии в итоге распаковывает только 9047 байт.Если я использую gunzip на Mac для расширения файла, я получаю файл размером 223344 байта.

Где я ошибся?

edit: Дополнительные данные

В случаеэто помогает, я получаю это при использовании GZip.Decompress

Bad CRC32 in GZIP trailer. (actual(7C64AEAA)!=expected(F641B726)) at Ionic.Zlib.ZlibBaseStream.finish()

Дополнительные данные при проверке позиции FileStream

fs pos: 2093 fs len: 33930
...