Russian Qt Forum
Сентябрь 23, 2024, 02:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Посчитать примерный размер архива  (Прочитано 5266 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Март 07, 2013, 09:54 »

Собственно все в заголовке, нужно перед архивацией прикинуть, хотя бы примерно, сколько будет весить архив. Кто знает есть ли алгоритм ?
Записан
Bepec
Гость
« Ответ #1 : Март 07, 2013, 10:11 »

Помоему никак. Там жеж всё зависит от содержимого файлов вроде. Файлы заполненные "АААА" сожмутся на 95 %.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Март 07, 2013, 10:24 »

Ну, заархивировать куда-нить в файл в виртуальной/оперативной памяти (или, может быть tmpfs или как там),
посчитать сколько оно получилось по размеру.
Если много - то освободить, если нормуль - то скинуть содержимое в файл на ЖД.  Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 07, 2013, 10:34 »

Собственно все в заголовке, нужно перед архивацией прикинуть, хотя бы примерно, сколько будет весить архив. Кто знает есть ли алгоритм ?
Из каждого файла взять кусок (примерно 8K), сжать его в памяти и посмотреть что получилось. 
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Март 07, 2013, 13:02 »

На 0.5 умножай размер. А если серьёзно, то можно по типам файлов определить их сжимаемость. Предположим, мы знаем, что exe жмутся в 2 раза, jpg, png, архивы, odt не жмутся, txt, html - жмутся хорошо раз в 5.
Вот пройдись по файлам и просчитай.
« Последнее редактирование: Март 07, 2013, 13:05 от navrocky » Записан

Гугль в помощь
Bepec
Гость
« Ответ #5 : Март 07, 2013, 13:04 »

К тому же следует понимать, что некоторые типы данных наоборот разбухнут Улыбающийся Помнится какой-то dat файл зиповал - вышло на 20 мб больше, чем сам файл Веселый
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #6 : Март 07, 2013, 13:19 »

Я почему то надеялся на то ,что есть алгоритм который может это посчитать. Жать в оперативную память ,а потом проверять размер не очень хорошо, в этом случае мне проще изменить логику программы.

Пока больше всего подходит идея Igors. Если файл psd у меня жмется примерно на 71% то алгоритм показывает 78, да погрешность есть, но это можно учитывать.

Умножать на 0.5, тоже не вариант хотя бы по тому ,что некоторые файлы так не жмутся, а определять % сжатия для каждого формата ну это же можно и год за компом провести Улыбающийся
« Последнее редактирование: Март 07, 2013, 13:33 от ecspertiza » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Март 07, 2013, 14:12 »

Простой но интересный тест: создать 1000 float с помощью rand() и записать в двоичный файл. Практически не жмется - потому что шум "белый". Впрочем и "розовый" тоже не очень
Записан
schmidt
Гость
« Ответ #8 : Март 08, 2013, 23:04 »

Цитировать
Собственно все в заголовке, нужно перед архивацией прикинуть, хотя бы примерно, сколько будет весить архив. Кто знает есть ли алгоритм ?

Собственно, такого алгоритма нет  Подмигивающий Вся "беда" в том что:

1. Разных алгоритмов сжатия существует бесчисленное множество, достаточно взглянуть хотя бы на подобные тесты: http://www.compression.ru/arctest/act/act-text.htm

2. Результат работы зависит непосредственно от самих данных. Посмотрите, для примера, алгоритм Хаффмана: http://habrahabr.ru/post/144200/. Вообще вот здесь http://www.compression.ru/arctest/descript/comp-hist.htm лежит очень занятный обзор техник сжатия данных.

Теоретически возможно приблизительно определить, пожат ли файл архиватором/протектором, рассчитав его энтропию - в частности такой трюк реализован в утилите PeID, предназначенной для определения конкретного протектора, которым был обработан EXE-файл. Однако, это лишь приблизительная оценка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.