Seite 1 von 3

RAR Datei entpacken

Verfasst: 01.07.2006 10:48
von onny
:roll: hi, ich glaube darüber wurde schon oft diskutiert, doch nie hat ein example bei mir gefunzt. hat jemand einen code der eine rar datei entpackt?

ExtractRAR("C:\meinerar1.rar","C:\Entpackt")

sowas wäre ein traum.... :wink:

Verfasst: 01.07.2006 10:54
von Macros
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.

Verfasst: 01.07.2006 11:15
von onny
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.
danke, die datei hab ich schon länger gesucht! werd ma schauen was ich damit machen kann! :allright:

Verfasst: 01.07.2006 11:48
von onny
hm, leider funzt das mit der winrar lib von purearea nicht :-( der will die unrar.dll nicht erkennen :freak:

//edit: ok, eigentlich brauch ichs jetzt nicht mehr.... würde mich aber drotzdem interisieren.

Verfasst: 01.07.2006 14:17
von PBZecke
Sind die Funcs der unrar.dlll nicht dokumentiert? Dann könntest Du die
doch auch ohne Lib aufrufen.

Verfasst: 01.07.2006 14:24
von Kiffi
> Sind die Funcs der unrar.dlll nicht dokumentiert?

so wie ich das sehe, ist das recht gut dokumentiert. Ist das die offizielle
Seite? http://www.rarlab.com/rar_add.htm

> Dann könntest Du die doch auch ohne Lib aufrufen.

in der Tat: Die Lib wäre dann hinfällig.

Freiwillige vor! :-)

Grüße ... Kiffi

Verfasst: 03.11.2006 12:20
von onny
das ist viel zu schwer für mich... :cry:

Verfasst: 03.11.2006 15:46
von FGK
@onny

Habe heute Zeit und Lust gehabt und Euch ein PureRARDemo
gebastelt. Es ist eine Portierung des VB Demos auf der RAR Homepage
http://www.rarlab.com/rar_add.htm

Vielleicht kann das ja jemand als Startgerüst für eigene
Projekte brauchen.
Es ist nicht optimiert und nur darauf ausgelegt daß es eben mal die
Funktion demonstriert. Nähere Anleitung zur Unrar.dll, ein TestRar-Archiv
und den Source in PB sind im Zip enthalten.

Sourcecode
PureRARDemo.zip

Grüße FGK

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

Verfasst: 03.11.2006 21:36
von Thomas
Noch einfacher:

WinRAR (krigst du unter www.winrar.de)
:bounce:

Verfasst: 03.11.2006 21:38
von Kiffi
> Noch einfacher:

ts, ts, wie unsportlich!

Thomas, sowas muss man selber programmieren! ;-)

Grüße ... Kiffi