BIX je WIN32 konzolová aplikace pro kompresi a dekompresi souborů. Dokáže komprimovat obsah adresáře včetně podadresářů.
#INCLUDE "Main.h" ************************************************************* * Procedura, která vrátí objekt pro pakování a rozpakování ************************************************************* PROCEDURE GetInterface(loObj) *@loObj - Vlastnost do které se zapíše odkaz na objekt pro pakování loObj=CREATEOBJECT("_bix_Archiver") ************************************************************* * Vlastní třída pro pakování a rozpakování ************************************************************* DEFINE CLASS _bix_Archiver AS Custom Name="_bix_Archiver" * Dekompresní metoda PROCEDURE Decompress(loPack) * loPack - Objekt pro rozpakování LOCAL lcDir,lcProgram,lctmpFile,lcUnpackPath,liz,lcStartupInfo,lcProcessInfo,liRet LOCAL ARRAY laDir(1) lctmpFile=loPack.File_S && Převezmi název zdrojového souboru lcDir=ExtractPathFromFile(lctmpFile) + CHR(0) lcUnpackPath=GetTempPathEx()+SYS(2015)+"\" && Název pomocného adresáře =MKD(lcUnpackPath) && Vytvoř pomocný adresář * Vytvoř C++ strukturu z VFP objektu lcStartupInfo=loPack.SI.CreateString() lcProcessInfo=loPack.PI.CreateString() lcProgram = loPack.PU.D_File+" e "+lctmpFile+" -o"+lcUnpackPath+" -y" + CHR(0) =SetLastError(0) && Resetuj chybu pro vlákno liRet=_PP_ProcessFailed IF CreateProcess(.NULL., lcProgram, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, @lcDir, @lcStartupInfo, @lcProcessInfo)#0 * Výborně neselhalo to loPack.PI.ReadString(@lcProcessInfo) && Načti informace o spuštěném procesu. * Nyní běhej ve smyčce tak dlouho, dokud proces běží DO WHILE WaitForSingleObject(loPack.PI.hProcess, 250 ) = WAIT_TIMEOUT ENDDO =CloseHandle(loPack.PI.hProcess) && Uzavři handle liz=ADIR(laDir,lcUnpackPath+"*.*","ASRH") && Načti všechny soubory liRet=IIF(liz=0,_PP_PAUNFailed,; IIF(MoveFile((lcUnpackPath+laDir(1,1)+CHR(0)),(loPack.File_D+CHR(0)))=1,_PP_ErrOK,_PP_PAUNFailed)) ENDIF =RemoveDirectoryAll(lcUnpackPath) && Zlikviduj pracovní cestu RETURN liRet ENDPROC * Kompresní metoda PROCEDURE Compress(loPack) * loPack - Objekt pro zpakování LOCAL lcDir,lcProgram,lcStartupInfo,lcProcessInfo,liRet,liExitCode lcDir=ExtractPathFromFile(loPack.File_S) + CHR(0) && Zjisti adresář, ve kterém se soubor nachází. lcProgram = loPack.PU.C_File+" a "+loPack.File_D+" "+ExtractFileFromFile(loPack.File_S) + CHR(0) * Vytvoř C++ strukturu z VFP objektu lcStartupInfo=loPack.SI.CreateString() lcProcessInfo=loPack.PI.CreateString() =SetLastError(0)&& Resetuj chybu pro vlákno liRet=_PP_ProcessFailed IF CreateProcess(.NULL., lcProgram, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, @lcDir, @lcStartupInfo, @lcProcessInfo)#0 * Výborně neselhalo to loPack.PI.ReadString(@lcProcessInfo) && Načti informace o spuštěném procesu. * Nyní běhej ve smyčce tak dlouho, dokud proces běží liExitCode=STILL_ACTIVE DO WHILE liExitCode=STILL_ACTIVE =Sleep(500) && Počkej půl vteřiny =GetExitCodeProcess(loPack.PI.hProcess,@liExitCode ) && Zjisti návratový hodnotu z procesu ENDDO =CloseHandle(loPack.PI.hProcess) && Uzavři handle liRet=_PP_ErrOK ENDIF RETURN liRet ENDPROC ENDDEFIN