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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: динамическое создание файла ресурсов  (Прочитано 9764 раз)
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #15 : Ноябрь 01, 2012, 22:17 »

Т.е. qint64 (кстати, почему тогда не quint64?) на длину тега с учётом возможной длины имени файла в 2^32 байт Улыбающийся? Но ведь всё равно sizeof (MyTag) будет константой сколько полей длинны не клади Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Ноябрь 02, 2012, 13:02 »

(кстати, почему тогда не quint64?)
Ну винтов (или томов) вылазящих за long long пока не видно, а иметь знаковое значение удобнее

Т.е. qint64 (кстати, почему тогда не quint64?) на длину тега с учётом возможной длины имени файла в 2^32 байт Улыбающийся? Но ведь всё равно sizeof (MyTag) будет константой сколько полей длинны не клади Улыбающийся
Задумка такая: считали ID и длину тега, смотрим интересен ли нам он. Нет - seek на следующий. Да - заглатываем имя и др информацию (обычной сериализацией). Т.е. использовать sizeof (MyTag) никто не собирается, Обычно считывается контейнер тегов (их заголовков) а там уже по месту.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #17 : Ноябрь 02, 2012, 13:43 »

Задумка такая: считали ID и длину тега, смотрим интересен ли нам он. Нет - seek на следующий. Да - заглатываем имя и др информацию (обычной сериализацией). Т.е. использовать sizeof (MyTag) никто не собирается, Обычно считывается контейнер тегов (их заголовков) а там уже по месту.
Неоптимальное решение, ибо если в архиве тысяча файлов и нужный файл самый последний, то придётся про-seek-ать весь файл.
Для таких вещей обычно делается такая структура архива:
в начале файла храним указатель на индекс:
struct Header
{
   quint64 index_offset;
   quit64  index_size;
};
в MyTag нужно добавить quit64 offset;
далее друг за дружкой пишем файлы c сохранением позиции начала файла в MyTag::offset
и уже после них получаем Header.index_offset;
далее пишем MyTag's, заполняем Header.index_size;
далее встаём в начало файла и опять пишем Header.
При чтении считываем Header. По его данным получаем индекс. В индексе ищем нужный файл и получаем его смещение.
Записан

Qt 5.11/4.8.7 (X11/Win)
vregess
Гость
« Ответ #18 : Ноябрь 02, 2012, 13:55 »

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

Почему бы не использовать zip-архивы, есть обертка для Qt - QuaZip (http://quazip.sourceforge.net).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Ноябрь 02, 2012, 13:57 »

Неоптимальное решение, ибо если в архиве тысяча файлов и нужный файл самый последний, то придётся про-seek-ать весь файл.
Для таких вещей обычно делается такая структура архива:
в начале файла храним указатель на индекс:
Это часто называется TOC. Так были устроены еще незабвенные .wad файлы Улыбающийся Однако Вы забыли упомянуть о минусе этого решения: уязвимость TOC. Если я начал писать (и уже затер ТOC) и тут рубанули свет - все накрылось.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #20 : Ноябрь 02, 2012, 14:14 »

Однако Вы забыли упомянуть о минусе этого решения: уязвимость TOC. Если я начал писать (и уже затер ТOC) и тут рубанули свет - все накрылось.
Хм, а где гарантия, что всё не накроется при Вашем последовательном варианте? При современном устройстве дисковых подсистем что-либо гарантировать при отключении питания я бы не стал.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Ноябрь 02, 2012, 14:32 »

Хм, а где гарантия, что всё не накроется при Вашем последовательном варианте? При современном устройстве дисковых подсистем что-либо гарантировать при отключении питания я бы не стал.
Ну так я тупенько пишу в конец файла. Сбой - ну да, последний тег invalid, но я могу это определить на следующем скане (размер не сбивается). Впрочем обе схемы (с TOC и без) достаточно популярны/хороши.

У меня есть такая задача. На каждом запуске/проходе приложение грузит N картинок (больших). Расходы на распаковку jpg, png и др. значительны. Используются имеджи в "прямом" формате (ARGB и др), так же как и QImage. Однако никто не гарантирует что файлы остаются неизменными - надо проверять и, если надо, перегружать. Как бы Вы кешировали загрузку?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #22 : Ноябрь 02, 2012, 14:40 »

Размер + timestamp.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Ноябрь 02, 2012, 15:14 »

Размер + timestamp.
Ну как определить что файл изменен - то ясно. Вопрос был как кешировать. Хотя если нет желания обсуждать - не настаиваю
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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