Meshbeyn / Projects

Пример использования функций для работы со сжатыми потоками

static void ExampleCompression()
{
    //Create new file. Delete the file before restart example!
    FileStream FS = new FileStream(@"d:\file.fil", FileMode.CreateNew);
    for (int i = 0; i < 1000; i++)
        for (byte b = 0; b < 250; b++)
            FS.WriteByte(b);
    FS.Flush();

    //Size of not compressed file
    Console.WriteLine("File Size: {0}", FS.Length);
    Console.WriteLine("Occupied: {0}", FS.GetLengthCompressed());

    //Occupied size for compressed file
    FS.SetCompressedAttribute(true);
    Console.WriteLine();
    Console.WriteLine("Compressed: {0}", FS.GetLengthCompressed());

    //Occupied size for uncompressed file
    FS.SetCompressedAttribute(false);
    Console.WriteLine();
    Console.WriteLine("Decompressed: {0}", FS.GetLengthCompressed());
            
    FS.Close();
}

Что происходит в данном примере:

  1. Сначала создается файл D:\file.fil размером в 250000 байт. Чтобы случайно не затереть нужный файл и не оставить атрибуты от старого файла, мы создаем принудительно новый файл. Перед каждым запуском примера Вы должны удалять созданный файл с диска.
  2. Затем выводится логическая длина потока и длина сжатого потока. Так как файл еще не сжат, вторая длина равна первой.
  3. Затем у файла устанавливается атрибут сжатия и выводится длина сжатого потока. Наш файл состоит из повторяющихся блоков, поэтому должен относительно хорошо сжиматься.
  4. И, наконец, у файла снимается атрибут сжатия и выводится длина сжатого. Она опять равна логической длине.
File Size: 250000
Occupied: 250000

Compressed: 49152

Decompressed: 250000
Для продолжения нажмите любую клавишу . . .
            
Распечатка вывода данного примера

Общее описание работы со сжатыми потоками см. в разделе Сжатые и разреженные потоки.