|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
||
Распаковщик псевдо архивов27.05.2012, 22:26. Показов 15389. Ответов 148
Метки нет (Все метки)
Суть такая
Нужно написать распаковщик псевдо архивов. Выглядит примерно так. Форму создал прописал открытие файлов, вывод (хранения размер) А дальше стопор. Встали две основных проблеммы. Суть проблем такая 1 В окне открываешь файл (любой) 2 В окне открываешь таблицу смещения вида
Жмешь на распаковать И он разрезает файл согласно заданным смещениям. в файле*.tab 1 вопрос нужно ли добавлять второй диолого на файл с таблицей? Или достаточно 1 -го диалогового окна? 2 вопрос. Не где подобного не нашел. Не плохо бы какойто пример чтоб мне разобратся. А то я встал в тупик. Примерно выходит так 1 читается первая строчка в *.tab 2 Ищется в файле архива 3 создается файл туда копируется содержимое 4 сохраняется. Буду примного благодарен за помощь.
0
|
||
| 27.05.2012, 22:26 | |
|
Ответы с готовыми решениями:
148
хочу узнать вашу мнение о Упаковщик+распаковщик UPX Псевдо raytracing opengl Построение псевдо-фазовой траектории |
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
||||||
| 31.05.2012, 18:48 [ТС] | ||||||
|
Подправил самую первую вашу версию(пост #2). Теперь все работает
Таблица в кодировке ANSI
0
|
||||||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 31.05.2012, 21:27 | |
|
А зачем? У тебя же уже работает прямо с двоичной таблицей.
0
|
|
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
||||||
| 31.05.2012, 21:32 [ТС] | ||||||
|
Одиночка,
Для повышения самообразования. ![]() Добавлено через 2 минуты
0
|
||||||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|||||||||||
| 31.05.2012, 22:08 | |||||||||||
|
Это я описываю как выглядит наши данные в буфере. А потом как-бы накладываю эту запись на буфер и вычираю нужные данные в нужном виде. Это не переменная а структурированный тип данных. Если бы в таблице (двоичной) все записи были одинаковые. Тогда можно было описать файл:
Если бы небыло первых 4 бай - всё было бы немного проще.
0
|
|||||||||||
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
||
| 31.05.2012, 23:34 [ТС] | ||
|
Так есть же seek - Насколько я помню им можно установить откуда читать. Например ставишь seek(4,параметр). Я как раз про него читаю. Ведь по идее можно создать промежуточные данные. Считать первые 2 байта (количество файлов). А потом при помощи seek перепрыгнуть(пропустить 2 мусорных байта) куда надо. Или я не так понимаю?
Добавлено через 14 минут Еще не понятно почему буфер 12 байт. Это влазиет только название файла.
Тут я что то немного не понял?
0
|
||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|||||||||||
| 31.05.2012, 23:37 | |||||||||||
|
Я тебе говорил о том, как описывать файл, и как потом с ним работать. Там нет необходимости использовать Seek. Первые 4 байта (не 2) - это количество файлов. Мы их просто читаем как переменную Integer.
Но если бы описали файл как файл записей Zap - мы могли бы и обращаться к нему соответственно:
А Zap - это просто структурированный тип данных. Почитай за них. Согласно структуре нашей записи в файле.
0
|
|||||||||||
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
|||||||
| 03.06.2012, 13:33 [ТС] | |||||||
|
А Zap. Я бы поподробней поговорил(про константы и массивы читал, а вот про структурированный тип данных нет.).
Появилось пару вопросов по ходу изучения. 1 тут решил простенько поработать с буфером чтоб набраться опыта. Простенькая программа Скриншот. Тестировал на фале смещений от potera. Через диалоговое окно подключил файл и начал эксперименты. На первом повороте 'покинул трассу'.
Вроде все правильно.
Buf : Array[0..11] Of byte; //Выделяем буфер 12 байт. Буфер(Buf)Можно задать любыми переменными(A, B, C) Пример: A : Array[0..11] Of byte; //Выделяем буфер 12 байт. C : Array[0..11] Of byte; //Выделяем буфер 12 байт. Или там определенные переменные? Сколько можно задать Буферов(Buf) в одной программе? Buf : Array[0..11] Of byte; //Выделяем буфер 12 байт. Можно ли в буфере сделать подчеркнутую цифру - переменной? Например, чтоб изменять ее можно было бы через окно Edit?
0
|
|||||||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 03.06.2012, 13:54 | |
|
Во-первых по ошибке:
Функция IntToHex(Value:Integer; Digits:Integer); преобразует целое число в строковое выражение 16-ричного представления числа. Digits - задаёт количество знаков выходного числа - для байта 2 - 16-ричных цифры, для других типов в зависимости от размера. А ты в обращении к функции задаёшь массив параметром. Для преобразования массива - делай в цикле - перебирай по очереди. Дальше. Buf - это обыкновенный массив. И естественно идентификатор может быть любым, допустимым идентификатором. Я его назвал буфером - так как в нашем случае он служит промежуточным буфером для чтения данных из одного файла и запись в другой. Указать другую размерность массива во время выполнения программы можно. Но для этого массив нужно описывать как динамический. Но тут рассказывать долго, поэтому почитай сам на форуме. Есть отличное описание работы с динамическими массивами. В одной программе массиво можно описывать сколько угодно. Наверное есть ограничения, но для нас это можно считать бесконечностью. Размерность массива имеет ограничения, но там порядка до 2 Гб может быть ёмкость. Точнее не скажу.
1
|
|
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
|
| 03.06.2012, 14:34 [ТС] | |
|
Тупанул не то написал
s:=IntToHex(Buf); // Преобразовываем данные буфера в текст. В текст надо преобразовать Я писал так s:=IntToStr(Buf,12); //Преобразовываем данные буфера в текст. Про массив и цикл понятно. Но сейчас мне нужно вывести только одно слово.(12 байт) Ошибка [Warning] Unit1.pas(7): Unit 'FileCtrl' is specific to a platform
0
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
||||||
| 03.06.2012, 14:48 | ||||||
|
Почитай ещё раз внимательно за IntToHex.
Нужно писать так:
0
|
||||||
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
|
| 03.06.2012, 15:22 [ТС] | |
|
Все вроде теперь встало на свои места. Я его сделал(Массив) но не объявил.
С массивами еще надо поупражняться.
0
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
||||||
| 03.06.2012, 15:31 | ||||||
|
Кстати, сразу не обратил внимания. Мне тоже иногда выдаёт:
0
|
||||||
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
|
| 03.06.2012, 17:24 [ТС] | |
|
Дело в том что у меня на ней останавливается при запуске и программа дальше не идет.(не запускается не компилируется.)
0
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|||||||||||
| 03.06.2012, 17:27 | |||||||||||
|
У меня нормально происходит компиляция и запуск. Там же нет сообщения ?:
Вот советуют вставить:
0
|
|||||||||||
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
|||||||||||||
| 03.06.2012, 18:09 [ТС] | |||||||||||||
|
Добавлено через 28 минут Займемся склеиванием А со склеиванием вообще не понятки. Алгоритм ясен. А код нет. Читаем из таблицы 1 строчку. Ищем, записываем в файл. (склеивание должно быть строго по таблице). Ищем в таблице второй файл читаем. Создаем и объядиняем с предыдущем и т.д. Если такой алгаритм будет то мы можем изменять размеры файлов. Перерыл много сайтов. Нашел только подобное этому. Сортировка
fale001 fale002 fale003 У нас для проверки будет такая таблица
Я все с юникода перенес на анси вариант (самый ваш первый.) Но юникодовскую тоже оставил на всякий случай.
0
|
|||||||||||||
| 03.06.2012, 18:11 | |
|
Не по теме: Извини. Можно позавтракаю? Потом продолжим.
1
|
|
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
|
| 03.06.2012, 18:14 [ТС] | |
|
Как удобней будет. А я пойду поужинаю.
0
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 03.06.2012, 19:37 | |
|
Давай начнём с начала. Постановка задачи:
1. У нас есть множество файлов разного размера. 2. Эти файлы нужно объединить в один. 3. Все эти файлы находятся в одной директории, которую мы будем указывать. 4. Либо в этой директории нет других файлов, либо есть какой-то признак, по которому нам можно отличить файл для склеивания, от какого-то левого файла, случайно попавшего в эту директорию. 3. Имея только эти данные можно поступить следующим образом: 3.1 Объединяем файлы в том порядке, в котором они попадаются в указанной директории. 3.2 Объединяем без добавления пустого места между ними. 3.3 Формируем таблицу распаковки, согласно структуре, которая была дана для распаковки. 3.4 Всё 4. Имеется таблица склейки. 4.1 Согласно этой таблице выбираем файлы и склеиваем их. Сортировка не обязательна. 4.2 Откуда берётся эта таблица?
0
|
|
|
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
|
||||||
| 03.06.2012, 19:52 [ТС] | ||||||
|
Они должны склеиваться строго по таблице в том порядке в котором разобрали.()
Размер разный. и имена не по парядку
1 распаковываем архив согласно распаковщику который написан ранее. 2 собираем его обратно (согласно таблице которую написали для распаковке.) Для примера таблицу и файл прикрепляю DeArxiver.7z
По ней распаковываем, по ней и собираем.
0
|
||||||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 03.06.2012, 20:00 | |
|
Так мы можем взять ту же таблицу, немного подправим алгоритм и получим склеенный файл. Так? Я имю в виду, наш алгоритм для распаковки.
0
|
|
| 03.06.2012, 20:00 | |
|
Псевдо-вирус (Delphi глазами хакера ) Можно ли загружать файлы из архивов? Нужен компонент для создания архивов Помогите понять формат игровых архивов и карт Bash-распаковщик архивов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|