Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Архивация (сжатие) файлов на компах в сети.


Автор: alexander13 10.11.2011, 01:09
Всем привет, нужна консультация. Не прошу писать код. Вот какая идея: есть 2 программки: клиент и сервер, есть локальная сеть, на всех компах сети установлена программа клиент, которая берет кусок файла архивирует его по алгоритму bzip2 и выдает на сервер массив байт, который последовательно записывается в выходной файл. Интересно мнение людей которые писали уже архиваторы или сталкивались с алгоритмами сжатия данных, такое вообще реально?. 
Вот прикинул как работает:
1. Сервер получает файл, который надо архивировать, он его разбивает на куски (блоки) n-ой длины (зависит от того сколько машин в сети).
2. После каждый блок помечается индексом следования и отправляется на клиентскую программку (локальная машина), которая входной файл будет архивировать.
3. на выходе клиентского приложения получаем массив байт и номер (очередность записи в финальный файл - итог архивации) и посылаем этот массив на сервер.
4. Сервер берет и обрабатывает, составляет общий массив байт (с учетом номера, который указывает следования клиентских массивов) и записывает в файл с расширением .bz2 (к примеру).
 
Может кто, может помочь с материалом (где почитать, что почитать smile)).  Если все же это возможно и то что я написал выше приемлемо, то вопрос как разбить большие файлы (к примеру пару гигов) на более мелкие ))))?

p.s. Всем спасибо, и да я в курсе, что такой подход будет меньше сжимать информации, за то машина (сервер) будет минимально загружаться и вообще этот топик создан, потому что мне интересно. Всем еще раз спасибо smile

Автор: xvr 10.11.2011, 16:48
Цитата(alexander13 @  10.11.2011,  01:09 Найти цитируемый пост)
Интересно мнение людей которые писали уже архиваторы или сталкивались с алгоритмами сжатия данных, такое вообще реально?. 

Тривиально, я бы сказал. Берете libbzip2, включаете ее в режиме сжатия потока, на вход заливаете ваш файл, выход выливаете в TCP сокет. На сервере все происходит в другую сторону.

Цитата(alexander13 @  10.11.2011,  01:09 Найти цитируемый пост)
вопрос как разбить большие файлы (к примеру пару гигов) на более мелкие ))))?

Вам надо обеспечить отказоустойчивую передачу с возможностями дозалития файла? Если нет - то не заморачивайтесь разрезанием. Если да, то это уже другая задача, и bzip2 в ней самое простое  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)