Название: динамическое создание файла ресурсов Отправлено: Pixel от Октябрь 30, 2012, 13:10 как создать файл в который можно динамически поместить другие файлы? например: пользователь выбирает файлы с жесткого диска, эти файлы помещаются в некий архив, который сохраняется на диске в указанном месте, чтобы потом эти файлы другой пользователь мог извлечь к примеру.
Название: Re: динамическое создание файла ресурсов Отправлено: Bepec от Октябрь 30, 2012, 13:41 Это называется архив. Поместить файлы в архив можно архиватором.
Так же под ваше описание подпадает папка :D Название: Re: динамическое создание файла ресурсов Отправлено: Pixel от Октябрь 30, 2012, 15:38 мне нужно написать программу, которая будет создавать свои архивы. Именно файлом, а не папкой
Название: Re: динамическое создание файла ресурсов Отправлено: Alex Custov от Октябрь 30, 2012, 15:45 мне нужно написать программу, которая будет создавать свои архивы. Именно файлом, а не папкой Если сжатия не нужно, используй tar архивы. Их формат можно найти, как и написать простейшие [де]архиваторы. Название: Re: динамическое создание файла ресурсов Отправлено: Bepec от Октябрь 30, 2012, 15:57 на linux папки и файлы это одно и то же как бэ :)
PS простейший архиватор. Их дофига. Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Октябрь 30, 2012, 17:59 мне нужно написать программу, которая будет создавать свои архивы. Именно файлом, а не папкой Ну я так понял задание именно "свои". Ну так берете и пишете (примерно час)Код Например извлечь - открываете файл архива и считываете MyTag. Имя не подходит - делаете seek на след тег. Подходит - считываете содержимое которое записано за тегом, устанавливаете дату и флаги для извлеченного файла. Остальные операции (добавление, удаление и др) столь же очевидны. Название: Re: динамическое создание файла ресурсов Отправлено: Pixel от Октябрь 30, 2012, 21:12 Igors, спасибо! не подскажете где можно по подробней почитать про "seek" (поиск и чтение данных из файла)
Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Октябрь 30, 2012, 21:28 не подскажете где можно по подробней почитать про "seek" (поиск и чтение данных из файла) В букваре (Assistent). И не травмируйте форум такими квешнзами :'(Название: Re: динамическое создание файла ресурсов Отправлено: xokc от Ноябрь 01, 2012, 07:35 При наличии в структуре поля mName в виде QString так просто считать/записать MyTag не получится.
Название: Re: динамическое создание файла ресурсов Отправлено: Bepec от Ноябрь 01, 2012, 08:10 Ну почему же. Сделать ему фиксированную длину аля 1024 символа.
Больше смысла нет - имя файла в W рубится на 1024 символах в длине пути. К такому каталогу ни одна программа не сможет обратиться. PS в линуксе незнаю. Название: Re: динамическое создание файла ресурсов Отправлено: Serr500 от Ноябрь 01, 2012, 08:54 Больше смысла нет - имя файла в W рубится на 1024 символах в длине пути. К такому каталогу ни одна программа не сможет обратиться. Это в ANSI-версиях функций. В Unicode-версиях (с суффиксом W) максимальная длина имени около 32000 символов.Название: Re: динамическое создание файла ресурсов Отправлено: Bepec от Ноябрь 01, 2012, 09:39 to Serr500
Извиняюсь я конечно, но Unicode версии ОС Windows(W7) я незнаю. Однако я знаю, что если создать не совсем корректными методами каталог с путём/названием больше 1024, то эксплорер отказывается с ним работать, как и 95% программ. Удаление/открытие/обращение к файлу/каталогу прерывается. Если даже шелл ОС не работает с такими папками, то... То нефиг так делать. Название: Re: динамическое создание файла ресурсов Отправлено: Serr500 от Ноябрь 01, 2012, 10:25 to Верес
Согласен. Однако, моё уточнение относилось к фразе К такому каталогу ни одна программа не сможет обратиться. Всё-таки 5% программ может. ;)Unicode версии ОС Windows(W7) я незнаю. А такой версии нет. Просто большинство функций WinAPI с аргументами-строками имеют два варианта - ANSI и Unicode. Обычно используются стандартные хидеры M$, а в них имена функций - это макросы. Там FunctionName в зависимости от включенного/выключенного Unicode транслируется либо в FunctionNameA (ANSI), либо в FunctionNameW (Unicode).Название: Re: динамическое создание файла ресурсов Отправлено: Bepec от Ноябрь 01, 2012, 10:34 Нууу... Скажем так - программы исключительно перестрахованных программистов, которыми пользуются перестрахованные программисты :D
Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Ноябрь 01, 2012, 10:58 При наличии в структуре поля mName в виде QString так просто считать/записать MyTag не получится. Поэтому 2 поля длины :)Название: Re: динамическое создание файла ресурсов Отправлено: xokc от Ноябрь 01, 2012, 22:17 Т.е. qint64 (кстати, почему тогда не quint64?) на длину тега с учётом возможной длины имени файла в 2^32 байт :)? Но ведь всё равно sizeof (MyTag) будет константой сколько полей длинны не клади :)
Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Ноябрь 02, 2012, 13:02 (кстати, почему тогда не quint64?) Ну винтов (или томов) вылазящих за long long пока не видно, а иметь знаковое значение удобнее Т.е. qint64 (кстати, почему тогда не quint64?) на длину тега с учётом возможной длины имени файла в 2^32 байт :)? Но ведь всё равно sizeof (MyTag) будет константой сколько полей длинны не клади :) Задумка такая: считали ID и длину тега, смотрим интересен ли нам он. Нет - seek на следующий. Да - заглатываем имя и др информацию (обычной сериализацией). Т.е. использовать sizeof (MyTag) никто не собирается, Обычно считывается контейнер тегов (их заголовков) а там уже по месту.Название: Re: динамическое создание файла ресурсов Отправлено: GreatSnake от Ноябрь 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. По его данным получаем индекс. В индексе ищем нужный файл и получаем его смещение. Название: Re: динамическое создание файла ресурсов Отправлено: vregess от Ноябрь 02, 2012, 13:55 как создать файл в который можно динамически поместить другие файлы? например: пользователь выбирает файлы с жесткого диска, эти файлы помещаются в некий архив, который сохраняется на диске в указанном месте, чтобы потом эти файлы другой пользователь мог извлечь к примеру. Почему бы не использовать zip-архивы, есть обертка для Qt - QuaZip (http://quazip.sourceforge.net). Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Ноябрь 02, 2012, 13:57 Неоптимальное решение, ибо если в архиве тысяча файлов и нужный файл самый последний, то придётся про-seek-ать весь файл. Это часто называется TOC. Так были устроены еще незабвенные .wad файлы :) Однако Вы забыли упомянуть о минусе этого решения: уязвимость TOC. Если я начал писать (и уже затер ТOC) и тут рубанули свет - все накрылось. Для таких вещей обычно делается такая структура архива: в начале файла храним указатель на индекс: Название: Re: динамическое создание файла ресурсов Отправлено: GreatSnake от Ноябрь 02, 2012, 14:14 Однако Вы забыли упомянуть о минусе этого решения: уязвимость TOC. Если я начал писать (и уже затер ТOC) и тут рубанули свет - все накрылось. Хм, а где гарантия, что всё не накроется при Вашем последовательном варианте? При современном устройстве дисковых подсистем что-либо гарантировать при отключении питания я бы не стал.Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Ноябрь 02, 2012, 14:32 Хм, а где гарантия, что всё не накроется при Вашем последовательном варианте? При современном устройстве дисковых подсистем что-либо гарантировать при отключении питания я бы не стал. Ну так я тупенько пишу в конец файла. Сбой - ну да, последний тег invalid, но я могу это определить на следующем скане (размер не сбивается). Впрочем обе схемы (с TOC и без) достаточно популярны/хороши.У меня есть такая задача. На каждом запуске/проходе приложение грузит N картинок (больших). Расходы на распаковку jpg, png и др. значительны. Используются имеджи в "прямом" формате (ARGB и др), так же как и QImage. Однако никто не гарантирует что файлы остаются неизменными - надо проверять и, если надо, перегружать. Как бы Вы кешировали загрузку? Название: Re: динамическое создание файла ресурсов Отправлено: GreatSnake от Ноябрь 02, 2012, 14:40 Размер + timestamp.
Название: Re: динамическое создание файла ресурсов Отправлено: Igors от Ноябрь 02, 2012, 15:14 Размер + timestamp. Ну как определить что файл изменен - то ясно. Вопрос был как кешировать. Хотя если нет желания обсуждать - не настаиваю |