Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 18
1

Сжатие текстовых файлов за алгоритмом GZIP

12.12.2009, 11:51. Показов 3211. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! У меня возникла следующая проблема - сжать текстовый файл (с расширением txt) за алгоритмом GZIP. Вот нашел материал по нему:
msdn.microsoft.com/ru-ru/libr...zipstream.aspx

Суть проблемы в том, что компрессия не выполняется! То есть, после того, как я выполнил компиляцию, мне выдало, что компрессия выполнилась, и написан размер файла после компрессии -то есть написано, что сжатие выполнилось, захожу на диск, смотрю свойства этого файла - размер не изменился. Вопрос: почему?
Вот код программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
using System.IO;
using System.IO.Compression;
 
public class GZipTest
{
    private const int buffer_size = 100;
 
    public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
    {
        // Use this method is used to read all bytes from a stream.
        int offset = 0;
        int totalCount = 0;
        while (true)
        {
            int bytesRead = stream.Read(buffer, offset, buffer_size);
            if (bytesRead == 0)
            {
                break;
            }
            offset += bytesRead;
            totalCount += bytesRead;
        }
        return totalCount;
    }
 
    public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)
    {
        // Use this method to compare data from two different buffers.
        if (len1 != len2)
        {
            Console.WriteLine("Number of bytes in two buffer are different {0}:{1}", len1, len2);
            return false;
        }
 
        for (int i = 0; i < len1; i++)
        {
            if (buf1[i] != buf2[i])
            {
                Console.WriteLine("byte {0} is different {1}|{2}", i, buf1[i], buf2[i]);
                return false;
            }
        }
        Console.WriteLine("All bytes compare.");
        return true;
    }
 
    public static void GZipCompressDecompress(string filename)
    {
        Console.WriteLine("Test compression and decompression on file {0}", filename);
        FileStream infile;
        try
        {
            // Open the file as a FileStream object.
            infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] buffer = new byte[infile.Length];
            // Read the file to ensure it is readable.
            int count = infile.Read(buffer, 0, buffer.Length);
            if (count != buffer.Length)
            {
                infile.Close();
                Console.WriteLine("Test Failed: Unable to read data from file");
                return;
            }
            infile.Close();
            MemoryStream ms = new MemoryStream();
            // Use the newly created memory stream for the compressed data.
            GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
            Console.WriteLine("Compression");
            compressedzipStream.Write(buffer, 0, buffer.Length);
            // Close the stream.
            compressedzipStream.Close();
            Console.WriteLine("Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length);
            Console.ReadKey();
 
            
        } // end try
        catch (InvalidDataException)
        {
            Console.WriteLine("Error: The file being read contains invalid data.");
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Error:The file specified was not found.");
        }
        catch (ArgumentException)
        {
            Console.WriteLine("Error: path is a zero-length string, contains only white space, or contains one or more invalid characters");
        }
        catch (PathTooLongException)
        {
            Console.WriteLine("Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.");
        }
        catch (DirectoryNotFoundException)
        {
            Console.WriteLine("Error: The specified path is invalid, such as being on an unmapped drive.");
        }
        catch (IOException)
        {
            Console.WriteLine("Error: An I/O error occurred while opening the file.");
        }
        catch (UnauthorizedAccessException)
        {
            Console.WriteLine("Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.");
        }
        catch (IndexOutOfRangeException)
        {
            Console.WriteLine("Error: You must provide parameters for MyGZIP.");
        }
    }
 
    public static void Main(string[] args)
    {
 
        string usageText = @"C:\Копия lngcode12.txt";
        //If no file name is specified, write usage text.
        
            if (File.Exists(usageText))
            {
                GZipCompressDecompress(usageText);
            Console.ReadKey();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2009, 11:51
Ответы с готовыми решениями:

GZIP сжатие
Использую стандартный код, которого полно в интернете protected void...

Метод RLE, сжатие и распаковка текстовых файлов
Здравствуйте, подскажите пожалуйста, у меня такое вот задание по курсовой и я не совсем понимаю...

GZIP-сжатие
Возможно ли сжимать с помощью gzip и корректно отдавать браузеру статические html-файлы? ...

Gzip сжатие. Не работает
Выручайте! Уж и не знаю что делать. Решил другу помочь, ускорить сайт, вроде всё стандартное,...

2
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
12.12.2009, 12:44 2
Dmytry,
написано, что сжатие выполнилось, захожу на диск, смотрю свойства этого файла - размер не изменился. Вопрос: почему?

потому что ты выполняешь компрессию в памяти.
желательно не просто бездумно копировать пример, а еще бы и подразобраться "а чё, собстна, там ващще происходит" (Ж
1
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 18
12.12.2009, 13:36  [ТС] 3
в том то и дело - я пытался разбираться. как я понял, данные после компрессии записываются в в переменную ms, но как потом записать их обратно в файл -никак не пойму
0
12.12.2009, 13:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2009, 13:36
Помогаю со студенческими работами здесь

Включить gzip сжатие
КАК?? мне надо сжимать .js и .css. Я сжал архиватором 7-zip в формат .gz и загрузил их на хостинг...

Как использовать gzip-сжатие?
Здравствуйте, уважаемые форумчане! Есть простой сайт без системы управления. Как можно сжать...

Gzip сжатие (Ускорение загрузки сайта)
Здравствуйте! Подскажите, такой вопрос возник, надо ли включать Gzip сжатие файлов в Джумла, если...

Установить GZIP сжатие, как правильно
Не могу найти точной информации в интернете. В документации Php к ob_gzhandler написано , что она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru