RAR Datei entpacken

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

RAR Datei entpacken

Beitrag 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:
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag 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:
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag 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.
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Sind die Funcs der unrar.dlll nicht dokumentiert? Dann könntest Du die
doch auch ohne Lib aufrufen.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

das ist viel zu schwer für mich... :cry:
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag 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
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Noch einfacher:

WinRAR (krigst du unter www.winrar.de)
:bounce:
v6.00
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Noch einfacher:

ts, ts, wie unsportlich!

Thomas, sowas muss man selber programmieren! ;-)

Grüße ... Kiffi
a²+b²=mc²
Antworten