Си диез / Говнокод #2086 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
static void CompressFile(string inFilename, 
                             string outFilename)
    {

      FileStream sourceFile = File.OpenRead(inFilename);
      FileStream destFile = File.Create(outFilename);

      // Create the Compressed stream
      GZipStream compStream =
        new GZipStream(destFile, CompressionMode.Compress);

      // Write the data
      int theByte = sourceFile.ReadByte();
      while (theByte != -1)
      {
        compStream.WriteByte((byte)theByte);
        theByte = sourceFile.ReadByte();
      }

      // Clean it up
      sourceFile.Close();
      compStream.Close();
      destFile.Close();
    }

Пример из книги "Microsoft .NET Framework 2.0 Application Development Foundation", официального пособия для подготовки к экзамену 70-536.
Угадайте, почему "сжатые" файлы получаются больше несжатых.

Запостил: gecko gecko, (Updated )

Комментарии (12) RSS

    • нет, потому что "сжимать" по одному байту слегка нерационально
      Ответить
        • в том то и дело что нет, к примеру такой вариант уже будет реально сжимать (вариант кода чтобы явно убедиться что проблема именно в том, что пишется по одному байту) :
          static void CompressFile(string inFilename,
                                       string outFilename)
                  {
          
                      FileStream sourceFile = File.OpenRead(inFilename);
                      FileStream destFile = File.Create(outFilename);
          
          
          
                      // Create the Compressed stream
                      GZipStream gzStream =
                        new GZipStream(destFile, CompressionMode.Compress);
                      BufferedStream compStream = new BufferedStream(gzStream); 
          
                      // Write the data
                      int theByte = sourceFile.ReadByte();
                      while (theByte != -1)
                      {
                          compStream.WriteByte((byte)theByte);
                          theByte = sourceFile.ReadByte();
                      }
                      compStream.Flush();
                      // Clean it up
                      sourceFile.Close();
                      gzStream.Close();
                      destFile.Close();
                      compStream.Close();
                  }
          Ответить
          • Результат тот же: сжатый файл занимает больше места, чем оригинал
            Ответить
          • А что изменилось то? Вроде тоже по байту пишут...
            Ответить
  • Ещё тут нет using (ну или try/finally) для закрытия файлов в случае какого-либо исключения.
    Ответить
  • поддерживаю, намучался я с этими примерами тоже (этот - не единственный просто)
    Ответить
  • Всякие проверки специально убирают из примеров, чтобы они были читаемыми. Автор книжки хочет донести суть, а не привести полностью рабочий код.
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8