Marvin hat geschrieben:Müsste man den Pfad nicht einfach mit "@" angeben?
Code: Alles auswählen
res=CallFunctionFast(*RARProcessFile,hRAR,#RAR_EXTRACT,@"C:",@rarheader\FileName[0])
Gerade mal getestet. Klappt so nicht bei mir. nur ohne "@" und wenn
der "C:" Parameter leer "" ist. Hier nochmal eine überarbeitete
variante. Die DLL kann nun mit angegeben werden und #True wird
jetzt auch wirklich nur bei erfolg zurückgegeben.
Code: Alles auswählen
Global len.l
Structure RAROpenArchiveData
ArcName.s
OpenMode.l
OpenResult.l
CmtBuf.s
CmtBufSize.l
CmtSize.l
CmtState.l
EndStructure
Structure RARHeaderData
; ArcName As String * 260
; FileName As String * 260
ArcName.b[260]
Filename.b[260]
flags.l
PckSize.l
UnpSize.l
HostOS.l
FileCRC.l
FileTime.l
UnpVer.l
Method.l
FileAttr.l
CmtBuf.s
CmtBufSize.l
CmtSize.l
CmtState.l
EndStructure
Procedure.l CallBackRAR(msg.l,UserData.l,p1.l,p2.l)
;Debug msg
;Debug UserData
;Debug p1
len+p2
Debug "Current UnpackSize = " +Str(len)
EndProcedure
Procedure.l UnRarFile(RarArchive$,PackFile$,DestPath$,UnRarDLL$)
x.l=0
lHandle.l
iStatus.l
uRAR.RAROpenArchiveData
uHeader.RARHeaderData
sStat.s
Ret.l
uRAR\ArcName = RarArchive$
uRAR\CmtBuf = Space(16384)
uRAR\CmtBufSize = 16384
uRAR\OpenMode = 1 ; 1 = Entpacken / 0 = Liste
If Right(DestPath$,1)<>"" : DestPath$+"" : EndIf
If OpenLibrary(0, UnRarDLL$)
*RAROpenArchive.l = GetFunction(0, "RAROpenArchive")
*RARCloseArchive.l = GetFunction(0, "RARCloseArchive")
*RARReadHeader.l = GetFunction(0, "RARReadHeader")
*RARProcessFile.l = GetFunction(0, "RARProcessFile")
*RARSetChangeVolProc.l = GetFunction(0, "RARSetChangeVolProc")
*RARSetPassword.l = GetFunction(0, "RARSetPassword")
*RARSetCallback.l = GetFunction(0, "RARSetCallback")
lHandle = CallFunctionFast(*RAROpenArchive,@uRAR)
CallFunctionFast(*RARSetCallback,lHandle,@CallBackRAR(),0)
If uRAR\OpenResult = 0
Repeat
iStatus = CallFunctionFast(*RARReadHeader,lHandle, @uHeader)
If iStatus=0
sStat = PeekS(@uHeader\Filename)
If LCase(sStat) = LCase(PackFile$)
Ret = CallFunctionFast(*RARProcessFile,lHandle, 2, "", DestPath$+GetFilePart(PackFile$))
If Ret=0 : x=1 : EndIf
Else
Ret = CallFunctionFast(*RARProcessFile,lHandle, 0, "", "")
EndIf
EndIf
Until iStatus<>0
CallFunctionFast(*RARCloseArchive, lHandle)
EndIf
CloseLibrary(0)
Else
MessageRequester("Info", "UnRar.DLL konnte nicht geöffnet werden!", #MB_OK|#MB_ICONWARNING)
EndIf
ProcedureReturn x
EndProcedure
UnRarFile("c:\zzz.rar","aaa\asm.pb","c:\MyOwnFolder","C:\zzz\unrar.dll")