В одной из моих программ понадобилось извлечение множества файлов из ДатаСекции в одну из папок диска.
Поэтому сделал небольшой архиватор, основанный на функциях PackMemory и UnpackMemory.
Он позволяет создать архивный файл из файлов выбранной папки (процедура PurePak_Pac) и распаковать файлы из памяти в указанную папку (процедура PurePak_MemUnPac).
Естественно что алгоритм упаковки уникальный и ничем другим кроме данной программы, файлы не извлечь.
Упаковка файлов из папки в архив
XIncludeFile "PurePac_Func.pbi" Dir.s = PathRequester("Папка с упаковываемым файлами ","") If FileSize(Dir) = -2 ArchiveFile.s=SaveFileRequester("","","APB архивы|*.apb|Все файлы|*.*",0) If ArchiveFile<>"" If GetExtensionPart(ArchiveFile)="" : ArchiveFile+".apb" : EndIf If PurePak_Pac(Dir, ArchiveFile) = 1 MessageRequester("", "Успешно упаковано", #MB_OK) EndIf EndIf EndIf
Распаковка файлов
XIncludeFile "PurePac_Func.pbi" ArchiveFile.s=OpenFileRequester("","","APB архивы|*.apb|Все файлы|*.*",0) If FileSize(ArchiveFile)>0 Dir.s = PathRequester("Куда распаковать файлы ","") If FileSize(Dir) = -2 If ReadFile(0, ArchiveFile) Size=Lof(0) *mem=AllocateMemory(Size) ReadData(0, *mem, Size) If PurePak_MemUnPac(Dir, *mem, Size) = #True MessageRequester("", "Успешно распаковано", #MB_OK) EndIf FreeMemory(*mem) CloseFile(0) Else MessageRequester("", "Не удалось открыть файл", #MB_OK) EndIf EndIf EndIf
В проге WinAPI не использовал, поэтому в Linux и MacOS X скорее всего тоже будет работать.
Скачать файлы. http://pure-basic.narod.ru/forum_files/PurePAC.rar