Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизСвой .mpq файл Найти похожие ветки
← →
Alexey_ (2004-01-20 16:34) [0]Я создал программу которая сохраняет не 1 файл для последующей загрузки, а целых 60; общиий размер сохраняемых фалов порядка 5 мб.
Как создать что-то типа .mpq файла?
.mpq файл - файл папка - в нем могут храниться другие файлы и папки соответственно. Отличием от папки является то, что его нельзя просто так открыть нажатием кнопки Enter :).
Сопутствующие вопросы:
1) Как записывать другие файлы внутрь этого файла?
2) Как читать файлы из такого файла?
← →
YuRock (2004-01-20 16:47) [1]Посмотрите работу с интерфейсами IStorage/IStream.
Это примерно то, что Вы хотите - Storage-хранилище(папка), Stream - поток в хранилище(файл).
Работа с ними производится через методы этих интерфейсов (названия практически идентичны функциям работы с файлами) а так же с помощью ф-ций:
StgOpenStorage();
StgCreateDocfile();
и еще нескольких.
Кстати, на этом формате построена работа с файлами doc и xls (MS Office) и MB (конфигурации 1C)
← →
easy (2004-01-20 16:50) [2]MPQ Control ActiveX
http://www.extractor.ru/download.php?action=get&id=138&PHPSESSID=291a40ef99612ea199edd1539644bac2
← →
Dingo (2004-01-21 08:56) [3]Ну вы, блин, даёте! :-О
А что, типизированные файлы уже отменили? Создать нужную тебе структуру заголовка, где прописывались бы названия и смещения отдельных файлов, уже не судьба?
А после этого заголовка шли бы "впритык" те файлы, которые тебе сохранить надо.
Если очень уж трудно заголовок самому придумать - можешь воспроизвести структуру корневого каталога и FAT, хотя это и не оптимально совсем....
Вообще, иногда просто добивает склонность некоторых дельфистов искать готовые громоздкие и ненужные компоненты, вместо того, чтобы просто 10 минут подумать и за полчаса написать, что нужно, и как нужно именно для данной конкретной ситуации... Тем более, если нужно, чтобы так просто этот файл нельзя было открыть и прочесть -> свой формат, однозначно.
← →
Строитель (2004-01-21 10:56) [4]2 Dingo
при чем тут типизированные файлы?
← →
YuRock (2004-01-21 12:53) [5]> Dingo (21.01.04 08:56) [3]
Вы считаете, что придумать, сделать и отладить "файловую систему в одном файле" со всеми возможностями и способами обращения, как в Windows для NTFS и/или FAT можно легко сделать за 10 минут? Если да - то Вы либо не понимаете, о чем говорите, либо Вы непризнаный гений.
> готовые громоздкие и ненужные компоненты
При чем здесь компоненты?! Я лично говорил о Windows API.
← →
lucky_elf (2004-01-21 21:17) [6]2YuRock
Я вообещем-то не совсем понял причем тут NTFS? и винда причем? про них не сном не духом в этом вопросе. И почему же тогда не файловую систему SUN Solaris она круче (и файлы до 9 терабайт поддерживает и востанавливается быстро).
Было дано одно из правельных решений написать структуру самому, а для наглядности или примера взять FAT - File Allocate Table - Таблица размещения файлов, что воовсе не означает полный набор функций (приложений/утилит) для работы с ней - т.е. было предложено взять только структуру, про NTFS вообще я ничего не понял, он зачем? А реализация действительно возможна за полчаса, надо только оговорить, реализация чего? а за пол часа я лично бы смог реализовать (и отладить):
0. разработать простую конфигурацию. (без вложенных папок)
1. функцию для записи всех файлов в один файл (далее упаковка).
2. функцию для чтения файла из упаковки по имени.
Вот так и не так страшен черт как его молюют!!!
ЗюЫю к сожалению не знаю WinAPI так хорошо, поэтому промолчу :)
2Динго. Браво так жержать!
2Alexey.
Есть еще один способ. Если тебе надо запаковать файлы один раз и потом только их читать (как это сделано в StarCraft - *.mpq, Quake1,2,3 - *.pak и других игрухах), то можно скачать одну из бесплатных библиотек для работы с архивами - обычно они умеют только распаковывать :(, но этого вполне хватает, ну по крайней мере у меня была похожая задача и я использовал UnZip библиотеку - заодно и сжать можно, а чтобы не прочитали можно дать расширение файлу *.dat или еще какое нибудь, а от самых умных можно придумать и еще что нибудь, например файл зипа можно отличить (как впрочем и многие другие) по первым 2-м байтам, которые идентифицируют файлы зипа - так вот заменить эти байты и соответственно подправить исходник зипа, в том месте где он проверяет эти байты.
Такие библиотеки есть в инете - надо поискать на сайтах программистов или в форумах, я лично видел ZIP, PAK, IMP - умеет читать RAR и еще кучу всего.
Бест реградс!
← →
YuRock (2004-01-22 10:37) [7]> lucky_elf (21.01.04 21:17) [6]
> А реализация действительно возможна за полчаса, надо только оговорить, реализация чего? а за пол часа я лично бы смог реализовать (и отладить):
0. разработать простую конфигурацию. (без вложенных папок)
1. функцию для записи всех файлов в один файл (далее упаковка).
2. функцию для чтения файла из упаковки по имени.
Вы бы вопрос вначале почитали ( > Как создать что-то типа .mpq файла?
.mpq файл - файл папка - в нем могут храниться другие файлы и папки соответственно),
а затем уже говорили о том, за какое время Вы бы смогли написать такой формат файла.
← →
Amoeba (2004-01-22 15:30) [8]Лучшее решение см.
> YuRock © (20.01.04 16:47) [1]
← →
Holy (2004-01-22 15:44) [9]Я может чего-то не понимаю, но зачем изобретать велосипед?
← →
Lucky_elf (2004-01-22 20:48) [10]2YuRock
Что-то типа - это я так понимаю, имеющее схожую структуру, но не значит точно такое же, иначе можно взять уже готовое.
Вопрос я прочел и дал вполне реальные решения:
1. Написать самому (я пояснил, чтобы я смог сделать из предложенной задачи за 30 мин и более того - я же не сказал, что реализую полноценную файловую систему отвечающую современным стандартам с соблюдением всех стандартов ISO за пол часа, я так же и не сказал, что то, что я сделаю именно и просил этот парень - внимательно надо читать тебе! А если так подумать быть может ему и хватит перечисленных функций, или может стоит отказаться от СЛОЖНОЙ структуры и хранить ТОЛЬКО файлы, на этом экономим время нервы и более четко концентрируемся на ГЛАВНОЙ задаче. Кстати я не думаю, что работа с WinAPI сильно облегчить задачу).
2. Взять одно из готовых решений, например тот-же mpq, pak, zip, rar и etc, благо этого в нете найти можно. (я бы на этом и остановился)
2Amoeba
это как ты определил? на мой взгляд готовая библиотека (например ЗИП) самое то, потому как:
1. Хелп прилагается.
2. Проверена временем.
3. Я с этим разобрался за пол часа
4. и папки туды тоже можно писать
← →
Alexey_ (2004-01-24 17:13) [11]Небольшая поправочка:
Файл будет содержать вложенные папки и разнотипные файлы: .txt .bmp .avi .wav .
За 30 минут, по моему, это не решить :).
← →
Alexey_ (2004-01-24 17:16) [12]PS Если можно, напишите алгоритм.
← →
Palladin (2004-01-24 17:55) [13]ZIP(конкретнее один из вариаций LZW), именно этот формат использует IDSoftware (в Quake играл? ) в своих PAK файлах...
и ничего... никто не жалуется...
← →
Lucky_elf (2004-01-25 10:16) [14]2Alexey_
Я же говорю мне по плечу выполнить без вложенных папок - за 30 минут. файл не имеет значения - все файлы состоят из 0110101001010101010 и etc, какой не возьми, а вот как ты интерпритирует их сожержимое это уже другое дело.
А вообще лучше используй готовый - типа ЗИП
← →
Плохиш_ (2004-01-25 10:51) [15]
> Alexey_ (24.01.04 17:16) [12]
> PS Если можно, напишите алгоритм.
Вот так всегда. Дайте всё и нахаляву.
← →
Lucky_elf (2004-01-25 14:03) [16]Я тут кое что накатал по этой теме, куда кинуть?
Лано я на свой сервак кину забирай оттуда.
Прога: Д7.
Правда мне самому не очень нравиться - сначала глючила - вроде все работает, а файлы больше 32767 не сохраняет, точнее сохраняет но выходной файл маленький, потом нашел
FileWrite и FileRead
не могут работать с такими объемами, так что чтение идет побайтно, не совсем хорошо, но это только "учебный "пример реализации и не больше, к тому же если, скорость для тебя критична, то это можно поправить
ЗюЫю прога написана на скорую руку, так что в нет практичеаки никаких проверок на допустимые операции, т.е.
работать надо примерно так:
1. Запускаешь :)
Елси надо запаковать, то жмешь " Добавить", делаешь так сколько надо, потом жмешь " Сохранить" - сохраняешь их все в один
Если надо распаковать, жмешь " Открыть", выбираешь тот файл который у тебя получился, после чего ты увидишь его содержимое, т.е. сколько и чего в нем есть, выбираешь нужный жмешь " Распаковать" указываешь куда и какое имя и все получаешт свой файл
ЗюЫю2 Когда откроешь файл добавить в него и удалить что-то нельзя если надо то делай сам основа рабоает
Желаю удачи!
ftp://ftp.kamensk.donpac.ru/upload/goldsoft/Packer.zip
← →
Alexey_ (2004-01-25 18:13) [17]Огромное спасибо.
Этого исходника хватит. Немного доведу его до идеала для моей задачи...
Еще раз спасибо.
← →
Ihor Osov'yak (2004-01-25 18:37) [18]2 [16] Lucky_elf
> а файлы больше 32767 не сохраняет, точнее сохраняет но выходной файл маленький, потом нашел
FileWrite и FileRead не могут работать с такими объемами,
Неужели? Или может это Вам просто показалось?
← →
Palladin (2004-01-25 18:53) [19]Мда... эльф действительно удачливый....
← →
Lucky_elf (2004-01-25 19:26) [20]2Ihor Osov"yak © (25.01.04 18:37) [18]
> Ihor Osov"yak © (25.01.04 18:37) [18]
> 2 [16] Lucky_elf
>
> > а файлы больше 32767 не сохраняет, точнее сохраняет но
> выходной файл маленький, потом нашел
> FileWrite и FileRead не могут работать с такими объемами,
>
> Неужели? Или может это Вам просто показалось?
Я чего-то не понял, это ты так шутишь? или думаешь чего не понимаю, если так то объясни мне, а если нет то хотябы смайлы ставил, чтобы было понятней, а чёй-то я юмора не понял
Delphi syntax:
function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;
Судя по выше приведенному описанию видно, что не может он т.к. Integer он из 2-байт и не моежт быть более 32767.
← →
Palladin (2004-01-25 19:37) [21]Integer + F1
← →
Lucky_elf (2004-01-25 21:29) [22]2Palladin ©
> Integer + F1
я ВООБЩЕ-ТО от туда и взял это. А вообще к чему ты это
← →
Palladin (2004-01-25 22:03) [23]Прочти еще раз и очень внимательно то что написано в справке...
← →
Rouse_ (2004-01-25 22:14) [24]> Lucky_elf (25.01.04 21:29) [22]
Ну и чего ты там увидел?
← →
Rouse_ (2004-01-25 22:22) [25]> Integer он из 2-байт и не моежт быть более 32767.
Орешник ... однозначно...... ;))))))))))))))))
Зы: Смайлов хватит? ;)
← →
Lucky_elf (2004-01-25 23:10) [26]
> Palladin © (25.01.04 22:03) [23]
> Прочти еще раз и очень внимательно то что написано в справке...
Мдя действительно, косячек вышел, понадеялся, что осталось как пасе. Теперь я не вижу разницы в Integer и LongInt. Вот за что я и не люблю Пас/Делф. :)
> Rouse_ © (25.01.04 22:22) [25]
> > Integer он из 2-байт и не моежт быть более 32767.
> Орешник ... однозначно...... ;))))))))))))))))
>
> Зы: Смайлов хватит? ;)
Орешник так орешник, прально туды его,
Integer он из 2-байт и не моежт быть более 32767 - это не означает не верно полностью, это не верно только для 32-битного компилятора, так?
Человек не может знать всего и уследить за всем.
2Rouse_ ©
Смайлов хватит :)
← →
Palladin (2004-01-25 23:13) [27]
> Теперь я не вижу разницы в Integer и LongInt.
Стоит различать понятия Generic types и Fundamental
← →
Lucky_elf (2004-01-26 07:13) [28]Так вот и объясни. Я на Д пишу крайне редко, в следствии чего я даже не знал о существовании
> Стоит различать понятия Generic types и Fundamental
← →
Palladin (2004-01-26 07:27) [29]кратко:
был в TP Integer 2, а стал 4 причем он Generic и, кстати, дальше он будет 8...
Longint как был так и остался, ведь он Fundamental...
NOTE: в расчете на это и следует писать программы, что бы потом не истоптать клавиши Ctrl-Q-A...
← →
Lucky_elf (2004-01-26 18:54) [30]Ну в вообщем-то не фига я не понял разницы, т.е. зачем делать Integer как LongInt?
> NOTE: в расчете на это и следует писать программы, что бы
> потом не истоптать клавиши Ctrl-Q-A...
Сори! но в это я вообще не въяхал :(
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.276 c