Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-16697
GrayFace
2004-01-14 21:03
2004.02.06
Как сделать так, чтобы прога не убивалась при завершении сеанса?


14-16723
fag2000
2004-01-16 10:49
2004.02.06
Книги по ораклу


3-16084
Леонид
2004-01-10 23:14
2004.02.06
Работа с Мемо


1-16357
denis24
2004-01-24 10:21
2004.02.06
выпадающий список у combobox


1-16499
kaginava
2004-01-27 15:05
2004.02.06
FileMode





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский