RAR Datei entpacken
Verfasst: 01.07.2006 10:48

ExtractRAR("C:\meinerar1.rar","C:\Entpackt")
sowas wäre ein traum....

danke, die datei hab ich schon länger gesucht! werd ma schauen was ich damit machen kann!Macros hat geschrieben:Das geht mit der Unrar.dll
Du findest sie unter
http://www.winrar.de/html-ger/download/dl-tools.htm
genaueres kann ich dir leider nicht sagen,
da ich mich noch nicht damit beschäftigt habe.
Code: Alles auswählen
; ******************************************************************
;
; Ported to PureBasic by Frank Kastl
; pb.source/(at)/tiscali.de
;
; '******************************************************************
Global hDLL.l
Global *RAROpenArchive.l
Global *RARCloseArchive.l
Global *RARReadHeader.l
Global *RARProcessFile.l
Global *RARSetChangeVolProc.l
Global *RARSetPassword.l
#RARTestFile = "Purebasic.rar"
#CMD_List = 1
#CMD_Test = 2
#CMD_Unpack = 3
#LSTICON = 4
#ERAR_END_ARCHIVE = 10
#ERAR_NO_MEMORY = 11
#ERAR_BAD_DATA = 12
#ERAR_BAD_ARCHIVE = 13
#ERAR_UNKNOWN_FORMAT = 14
#ERAR_EOPEN = 15
#ERAR_ECREATE = 16
#ERAR_ECLOSE = 17
#ERAR_EREAD = 18
#ERAR_EWRITE = 19
#ERAR_SMALL_BUF = 20
#RAR_OM_LIST = 0
#RAR_OM_EXTRACT = 1
#RAR_SKIP = 0
#RAR_TEST = 1
#RAR_EXTRACT = 2
#RAR_VOL_ASK = 0
#RAR_VOL_NOTIFY = 1
Enumeration ;RarOperations
#OP_EXTRACT = 0
#OP_TEST = 1
#OP_LIST = 2
EndEnumeration
Structure RARHeaderData
; ArcName As String * 260
; FileName As String * 260
ArcName.b[260]
FileName.b[260]
flags.l
PackSize.l
UnpSize.l
HostOS.l
FileCRC.l
FileTime.l
UnpVer.l
Method.l
FileAttr.l
CmtBuf.s
CmtBufSize.l
CmtSize.l
CmtState.l
EndStructure
Structure RAROpenArchiveData
ArcName.s
OpenMode.l
OpenResult.l
CmtBuf.s
CmtBufSize.l
CmtSize.l
CmtState.l
EndStructure
Procedure Erro(msg.s)
MessageRequester("RarError",msg,#MB_ICONEXCLAMATION)
End
EndProcedure
Procedure OpenError(ErroNum.l, ArcName.s)
Select ErroNum
Case #ERAR_NO_MEMORY
Erro("Not enough memory")
Case #ERAR_EOPEN
Erro("Cannot open " + ArcName)
Case #ERAR_BAD_ARCHIVE
Erro(ArcName + " is not RAR archive")
Case #ERAR_BAD_DATA
Erro(ArcName + ": archive header broken")
EndSelect
EndProcedure
Procedure ProcessError(ErroNum.l)
Select ErroNum
Case #ERAR_UNKNOWN_FORMAT
Erro("Unknown archive format")
Case #ERAR_BAD_ARCHIVE
Erro("Bad volume")
Case #ERAR_ECREATE
Erro("File create error")
Case #ERAR_EOPEN
Erro("Volume open error")
Case #ERAR_ECLOSE
Erro("File close error")
Case #ERAR_EREAD
Erro("Read error")
Case #ERAR_EWRITE
Erro("Write error")
Case #ERAR_BAD_DATA
Erro("CRC error")
EndSelect
EndProcedure
Procedure RARExecute(Mode.l, RarFile.s,Password.s ="")
; Description:-
; Extract file(s) from RAR archive.
; Parameters:-
; Mode = Operation to perform on RAR Archive
; RARFile = RAR Archive filename
; sPassword = Password (Optional)
lHandle.l
iStatus.l
uRAR.RAROpenArchiveData
uHeader.RARHeaderData
sStat.s
Ret.l
uRAR\ArcName = RarFile
uRAR\CmtBuf = Space(16384)
uRAR\CmtBufSize = 16384
If Mode = #OP_LIST
uRAR\OpenMode = #RAR_OM_LIST
Else
uRAR\OpenMode = #RAR_OM_EXTRACT
EndIf
lHandle = CallFunctionFast(*RAROpenArchive,@uRAR)
If uRAR\OpenResult <> 0
OpenError(uRAR\OpenResult, RarFile)
Else
If Password <> ""
CallFunctionFast(*RARSetPassword, lHandle.l, Password.s)
EndIf
If (uRAR\CmtState = 1)
MessageRequester( "Comment",uRAR\CmtBuf,#MB_ICONINFORMATION)
EndIf
iStatus = CallFunctionFast(*RARReadHeader,lHandle, @uHeader)
While iStatus = 0 ;<> 0
sStat = PeekS(@uHeader\FileName)
Select Mode
Case #OP_EXTRACT
AddGadgetItem (#LSTICON, -1, "Extracting " + sStat+Chr(10)+ Str(uHeader\UnpSize))
Ret = CallFunctionFast(*RARProcessFile,lHandle, #RAR_EXTRACT, "", sStat)
Case #OP_TEST
AddGadgetItem (#LSTICON, -1, "Testing " + sStat+Chr(10)+ Str(uHeader\UnpSize))
Ret = CallFunctionFast(*RARProcessFile,lHandle, #RAR_TEST, "", sStat)
Case #OP_LIST
AddGadgetItem (#LSTICON, -1, "File " + sStat +Chr(10)+ Str(uHeader\UnpSize))
Ret = CallFunctionFast(*RARProcessFile,lHandle, #RAR_SKIP, "", "")
EndSelect
If Ret = 0 And Mode <> #OP_LIST
SetGadgetItemText(#LSTICON,CountGadgetItems(#LSTICON)-1,"OK..",2)
Else
ProcessError(Ret)
EndIf
iStatus = CallFunctionFast(*RARReadHeader,lHandle, @uHeader)
Wend
If iStatus = #ERAR_BAD_DATA
Erro ("File header broken")
EndIf
CallFunctionFast(*RARCloseArchive, lHandle)
EndIf
EndProcedure
Procedure InitDLL()
hDLL = OpenLibrary(0, "unrar.dll")
Debug hDLL
*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")
EndProcedure
OpenWindow(0,100,100,500,300, "PureRar Demo", #PB_Window_MinimizeGadget)
CreateGadgetList(WindowID(0))
ButtonGadget(#CMD_List, 10, 20, 70, 24, "List Rar")
ButtonGadget(#CMD_Test, 10, 45, 70, 24, "Test Rar")
ButtonGadget(#CMD_Unpack, 10, 70, 70, 24, "Unpack Rar")
ListIconGadget(#LSTICON,100,20,370,200,"RAR Files",260)
AddGadgetColumn(#LSTICON,1,"Filesize",50)
AddGadgetColumn(#LSTICON,2,"Status",40)
InitDLL()
Repeat
Event =WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #CMD_List
ClearGadgetItemList(#LSTICON)
RARExecute(#OP_LIST,#RARTestFile)
Case #CMD_Test
ClearGadgetItemList(#LSTICON)
RARExecute(#OP_TEST,#RARTestFile)
Case #CMD_Unpack
ClearGadgetItemList(#LSTICON)
RARExecute(#OP_EXTRACT,#RARTestFile)
EndSelect
Case #PB_Event_CloseWindow
CloseLibrary(0)
End
EndSelect
ForEver