Пример использования функций для работы со сжатыми потоками
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();
}
Что происходит в данном примере:
- Сначала создается файл D:\file.fil размером в 250000 байт. Чтобы случайно не затереть нужный файл и не оставить атрибуты от старого файла, мы создаем принудительно новый файл. Перед каждым запуском примера Вы должны удалять созданный файл с диска.
- Затем выводится логическая длина потока и длина сжатого потока. Так как файл еще не сжат, вторая длина равна первой.
- Затем у файла устанавливается атрибут сжатия и выводится длина сжатого потока. Наш файл состоит из повторяющихся блоков, поэтому должен относительно хорошо сжиматься.
- И, наконец, у файла снимается атрибут сжатия и выводится длина сжатого. Она опять равна логической длине.
Общее описание работы со сжатыми потоками см. в разделе Сжатые и разреженные потоки.