![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Народ, подскажите плиз самый простой способ склеивания файлов. То есть нужно получить что то типа архива, только без компрессии, а потом снова разобрать на исходные файлы. Компоненты не подходят. Может есть у когонибудь код процедурки? Или может кто нибудь просто подскажет самый простой способ. Заранее спасибо.
|
|||
|
||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: нет Всего: 74 |
Самый просто способ если не знаешь TFileStream- склеивать по байтам
![]() Но лучше почитать про TFileStream и просто все сделать за пару строк. Не забудь в конце файла дописывать информацию о вклееных файлах. -------------------- Всем добра ![]() |
|||
|
||||
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Хм.. Спасибо за идею... Так если в пару строк, может их опубликовать? Вдруг кому еще пригодится, да и разобраться проще будет....
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
||||
|
||||
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Спасибо Snowy, это то что нужно. Щас буду пробовать.
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Эта проблема поднимается уже в 99-й раз.
А у меня все руки не доходят мою утилиту дописать. Все. Решительно берусь. Пошел писать... |
|||
|
||||
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Еще раз спасибо. Кстати на форуме не нашел (видно плохо искал). И в drkb. Пошел писать тоже
![]() |
|||
|
||||
former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 4 Всего: 17 |
Snowy, попробовал кад предложенный в тобой, только упаковывал файлы разных типов (txt, jpg, bmp).
А при попытки выполнить следующий код ничего не происходит: ![]()
Что не так? -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
хмм.. 1: ну во первых получил ошибку при компиляции в процедуре save:
[Error] Unit1.pas(142): Incompatible types: 'TPersistent' and 'file' [Fatal Error] Project1.dpr(9): Could not compile used unit 'Unit1.pas' проблема решилась заменой assign на assignfile. Запись прошла. Размер архива навскидку правильный. Все отлично. 2. Процедура load: во первых понятно что максимальное имя файла 8 символов (задается в типе TFileNfo), мне это не удобно, заменил на 100. Ладно, но в итоге я получил файл размером в 5 байт (?), что естественно не является содержимым извлекаемого файла. Сейчас продолжаю трассировать. Есть у кого нибудь коментарии? Snowy? |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Комментарии отсутствуют. У меня все отлично работает.
Проверил - битмапа грузится без проблем. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
sani79, у меня работает такой код
Добавлено @ 10:15 Файлы последовательно будут записываться button1, а затем последовательно извлекатся button2(в том порядке в котором были записаны). Число файлов естественно не ограничивается двумя. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
alexeis1, Спасибо, этот код у меня отработал как нужно. Все получилось. Странно что не работает вышеописанный код от Snowy, я уверен что он должен работать тоже. Попытаюсь все таки разобраться. Ради спортивного интереса. Всем спасибо!
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
sani79, Я переделал код поприличней на много файлов
вот привожу
Добавлено @ 10:44 Кстати побайтовое сравнение распакованных и исходных показало полное совпадение Это сообщение отредактировал(а) alexeis1 - 11.4.2006, 10:47 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
sani79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Да все работает на отлично. Я проверял dbfами. Никаких потерь.
|
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Долго пишу. Вот собрал 2 класса:
* TFilesSaver - сохраняет кучу файлов в один * TFilesLoader - загружает файлы из пака
Пример использования:
Поэтому есть вероятность того, что в список попадут файлы с одинаковыми именами. Запишутся они корректно и прочитаются тоже. Просто осторожней с сохранением на диск. |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
По просьбе одного из участников выкладываю код извлечения имен файлов из архива.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Evghenusi |
|
|||
![]() майский жук ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 3.8.2006 Где: Молдова, Кишинёв Репутация: нет Всего: 15 |
alexeis1 если тебе не трудно напиши как можно из файла "Result.dat" вытащить
названия склеенных файлов в Listbox я написал такой код, но чтото не получается:
![]() ![]() Это сообщение отредактировал(а) Evghenusi - 1.12.2006, 21:26 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Evghenusi, ага я чуть-чуть опредил, решение выше
![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Evghenusi |
|
|||
![]() майский жук ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 3.8.2006 Где: Молдова, Кишинёв Репутация: нет Всего: 15 |
alexeis1
покажи мне, пожалуйста, где указывается адрес для распаковки файлов Это сообщение отредактировал(а) Evghenusi - 1.12.2006, 21:26 |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
А вот же
путь идет тот который записан, т.е. то что в переменной s если охота то можно добавить к нему путь к нужной папке. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
Evghenusi |
|
|||
![]() майский жук ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 3.8.2006 Где: Молдова, Кишинёв Репутация: нет Всего: 15 |
я тоже сначала подумал что "S" это путь к папке
но выходит ошибка. скачай архив и посмотри рисунок! Присоединённый файл ( Кол-во скачиваний: 6 ) ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Ничего удивительного я же не сказал туда писать директорию распаковки, а путь к файлу, т.е. это будет выглядеть так:
f := TFileStream.Create(DirPath + s, fmCreate); где в DirPath - будет путь к папке для извлечения. При конкатинации мы получим полный путь к каждому из файлов для сохранения. Похоже вы не поняли как работает этот код... -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Evghenusi |
|
|||
![]() майский жук ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 3.8.2006 Где: Молдова, Кишинёв Репутация: нет Всего: 15 |
да ты прав! но я сделал как ты сказал, и выходит ошибка, путь получается 'C:\temt\C:\files\' путь куда я хочу извлечь и папка, откуда я брал файлы Это сообщение отредактировал(а) Evghenusi - 2.12.2006, 11:22 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Evghenusi, если вы не хотите разбираться в сути, то используйте класс написанный Snowy он по крайней мере полнофункциональный (законченый), я же просто привел принцип для примера, как это делается.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Как добавить файлы в уже созданый архив (*.pak)
![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Модификация паков не предусмотрена.
Написать можно. Но цель была - создать 2 отдельных класса. 1 - для подготовки данных, которые будут использоваться в программе. 2 - для получения этих данных. В конечной программе подразумевалось использование только второго класса. Если нужно оба + модификация, то нужно писать один единый класс. Цель кода - не архиватор, а подготовка данных для использования в программе. Если нужен архиватор, то для этого нужно использовать соответствующие компоненты, либо подождать, когда я допишу свою утилиту... |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Ну может все таки можно как - то быстро добавить файлы в архив
![]() Я быстренько написал програмку которая упоковывает 6 файлов в архив и распоковывает файлы из какого-либо архива. Я делаю игру и мне нужно чтобы изображения (а возможно в дальнейшем и звуки) она [игра] брала из архива, который я сам создам, но так как изображений все больше и больше приходится каждый раз пересоздавать архив, а это очень нудно ![]() ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Быстро добавить можно.
А вот быстро написать новый единый клас не получится - много переделывать. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Тогда скажи как папку засунуть в архив (*.pak)
![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Пофайлово - сканишь файлы FindFirst/FindNext, добавляешь каждый по Add.
|
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Snowy
Пожалуйста поподробнее, я почти новичок в DELPHI ![]() ![]() ![]() ![]() |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Danя,
все же просто... находишь один файл, загружаешь его в TMemoryStream, затем копируешь весь этот поток в конец главного потока например DirectStream (TMemoryStream) и так дальше, с каждым найденным файлом... ;) А потом DirectStream сохраняешь в файл. Для начала научись с потоками работать, а там и сам все поймешь... -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
lukas,
![]() ![]() ![]() ![]() Пожалуйста можешь объяснить у меня очень мало времения!!! Мне через неделю показывать игру(хоть в каком - то виде), а у меня нифига ни сделано Это сообщение отредактировал(а) Danя - 15.5.2007, 19:21 |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
lukas, человек спрашивал, как пользоваться FindFirst, а не теорию склеивания.
К тому же со склеиванием всё давно решено - код в топе. Danя, видишь поле поиска вверху страницы? Введи туда FindFirst ;-) |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Snowy,
Издеваешься да? ![]() Но всёравно спасибо ![]() Добавлено @ 19:25
Ну а как не папки а название файлов в Листбокс вывести?? Вы не думайте я не леньтяй просто архивация это второе дело (но не менее важное) главное саму игрушку дописать/написать Это сообщение отредактировал(а) Danя - 15.5.2007, 19:26 |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Все ДОШЛО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() УРЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ ![]() ВСЕМ ОГРОМНОЕ СПАСИБО ПРОСТИТЕ, ЧТО ТУПИЛ |
|||
|
||||
_KLAUS_ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
Snowy,
Что делаю не так?? Три кнопки, нажимаю на первую создаётся "file.pak" На вторую создаётся папка "UnPack" - Но она пустая ..... На третью пишет "Bitmap is not avalid"..что не так-то?? Delphi 6 |
|||
|
||||
_KLAUS_ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
Ошибка
Я так понял, мы все нужные файлы в картинку пихаем, а как извлекать?? |
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Неверно указал пути к файлам при упаковке. Посмотри размер pak - он небось байта 4. Значит ничего не запаковал. А значит и распаковывать нечего ![]()
У тебя в корне диска C: есть bmp, mp3 или rar? Нет? Вот потому ничего и не упаковал.
Они так и лежат в файле. Просто мы можем достать оттуда любой из файлов в стрим. В примере с картинкой мы вытаскиваем из пака первый файл в TMemoryStream, а потом этот стрим грузим в битмап. Почему первый? Да потому что при добавлении мы сначала добавляли bmp. Можно указывать не по звёздочке, а конкретный файл. Но это детали. Файлы сами по себе не достаются. Их нужно доставать через GetFile. GetFile найдёт в паке выбранный файл (если он там есть) и прочитает его в стрим. А дальше что хошь с ним, то и делай. |
||||
|
|||||
_KLAUS_ |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
Да не, всё нормально, я правда только свои форматы запихал, а так они в корневом каталоге C:\ лежат , и *.pak получился нормального размера! Но папка UnPack всё равно пустая. И вот тут если я меняю значения на >0 , то файлы извлекаются но с нулевым размером!!
Добавлено через 3 минуты и 43 секунды Извлечение что-то не получается!! |
||||
|
|||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Откопал похожий компонент...
TStreamDirector, может добавлять Файлы, Потоки, Списки... вообще тоже очень удобно... Присоединённый файл ( Кол-во скачиваний: 21 ) ![]() -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
и вот еще один похожий...
http://www.torry.net/vcl/vcltools/streams/hkstrm.zip Это сообщение отредактировал(а) lukas - 14.9.2007, 18:38 -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
Apls |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Snowy, соглашусь с _KLAUS_. Сейчас разбираюсь с твоим исходником, тоже самое.
Создается папка UnPack, но файло в ней нет, если в процедуре TFilesLoader.SaveFile поменять знак на ">", то файлы извлекаются, но с нулевым размером. Что делать? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |