Seite 1 von 2

ZIP Datei in den Speicher einlesen

Verfasst: 13.10.2009 14:18
von X360 Andy
Gibt es eine (halbwegs einfache\verständliche) möglichkeit einen vorhandene ZIP Datein in den Speicher zu laden ?


ZIP Datei ( beispiel.zip )
Inhalt
- beispiel.txt
-- Inahlt der Beispiel.txt
--- "123456789"

Nun möchte ich ohne die ZIP datei vorher irgendwo auf dem Computer zu entpacken an den Datein INhalt, ich möchte einfach nur den Inhalt der Datei herausfinden.
Also 123456789

Ich benütze die PureZIP library, bin aber für jede alternative zu haben.

Re: ZIP Datei in den Speicher einlesen

Verfasst: 13.10.2009 14:31
von ts-soft
PureZip kanns bestimmt auch, aber das hab ich nicht zur Verfügung.
Mit Minizip bekommste die Infos durch eine Kombination von ZIP_GetFilesCount, ZIP_GetFileInfo
Wenn Du auch den Inhalt benötigst, dafür ist ZIP_CatchFile verantwortlich.

Gruß
Thomas

Re: ZIP Datei in den Speicher einlesen

Verfasst: 13.10.2009 14:36
von X360 Andy
Ich wusste doch das es auch von dir soetwas gab, nur wusste ich den Namen nicht mehr, danke werde mich damit auseinander setzen.

Re: ZIP Datei in den Speicher einlesen

Verfasst: 13.10.2009 14:43
von ts-soft
findeste hier: http://www.realsource.de/downloads/doc_ ... nizip.html

Zumindest als Include funktionierts auch mit PB4.40, als UserLib hab ichs noch nicht getestet.

Gruß
Thomas

Re: ZIP Datei in den Speicher einlesen

Verfasst: 14.10.2009 13:49
von gnozal
With PureZIP, you can use PureZIP_Archive_ExtractMem(*MemoryBank, MemoryBankSize.l) .

Open the archive with PureZIP_Archive_Read(), parse it with PureZIP_Archive_FindFirst()/PureZIP_Archive_FindNext() , get the file information with PureZIP_Archive_FileInfo() and use PureZIP_Archive_ExtractMem() to extract the archived file to a memory bank.

Re: ZIP Datei in den Speicher einlesen

Verfasst: 14.10.2009 20:11
von X360 Andy
thx for the different ways, ill try them all when im back home on my pc during the week.[@twice]

Re: ZIP Datei in den Speicher einlesen

Verfasst: 18.10.2009 16:38
von X360 Andy
I tryed a little bit with the samples in the helpfile, but without success <)

Code: Alles auswählen

 MyZIP.s = "C:\Users\Andreas\Desktop\XSX\try.zip"
 PureZIP_Archive_Read(MyZIP.s)
 *Memory_ZIP = AllocateMemory(10000)
 
 For i = 0 To PureZIP_GetFileCount(MyZIP)-1
   If PureZIP_GetFileInfo(MyZIP, i, @myFileinfo.PureZIP_FileInfo)
     Debug "Number " + Str(i)
     Debug "Filename: " + myFileinfo\FileName
     PureZIP_Archive_ExtractMem(@*Memory_ZIP, 10) ; <-- wie finde ich die Länge raus ohne die Datei vorher zu entpacken ?
     ; how can i find out the length of the file without open or extract the file ?
     If *Memory_ZIP
       Debug PeekS(*Memory_ZIP, 10)<--- ;  Error 
     EndIf
   EndIf
   
 Next
EDIT
sehe grad das ich wirklich keine Ahnung von der ganzen Memory sache habe :bounce:

EDIT 2

Code: Alles auswählen

 MyZIP.s = "C:\Users\Andreas\Desktop\XSX\try.zip"
 PureZIP_Archive_Read(MyZIP.s)
  *Memory_ZIP = AllocateMemory(1000)
  *Pointer = *Memory_ZIP
 
 For i = 0 To PureZIP_GetFileCount(MyZIP)-1
   If PureZIP_GetFileInfo(MyZIP, i, @myFileinfo.PureZIP_FileInfo)
     Debug "Number " + Str(i)
     Debug "Filename: " + myFileinfo\FileName
     PureZIP_Archive_ExtractMem(@*Pointer, 10) ; <-- wie finde ich die Länge raus ohne die Datei vorher zu entpacken ?
     ; how can i find out the length of the file without open or extract the file ?
     If *Memory_ZIP
       Debug MemorySize(*Memory_Zip)
       Debug PeekS(*Memory_ZIP, 10)
     EndIf
   EndIf
   
 Next
 
 
Das hier liefert zwar keinen Fehler aber es gibt nichts zurück .... :(

Re: ZIP Datei in den Speicher einlesen

Verfasst: 18.10.2009 16:57
von ts-soft

Code: Alles auswählen

XIncludeFile "minizip_include.pbi"

EnableExplicit

Define  MyZIP.s
Define info.unz_file_info
Define i
Define *mem

MyZIP.s = "c:\Users\Thomas\Downloads\TsiInclude.zip"

For i = 1 To ZIP_GetFilesCount(MyZIP)
  If ZIP_GetFileInfo(MyZIP, i, @info)
    Debug "Number " + Str(i)
    Debug "Filename: " + info\FileName
    *mem = ZIP_CatchFile(MyZIP, i)
    If *mem
      Debug "FileSize: " + Str(info\uncompressed_size)
      Debug "MemorySize: " + Str(MemorySize(*mem))
      Debug "====================="
      FreeMemory(*mem)
    EndIf

  EndIf
Next
Pfad zum Archiv bitte anpassen!

Re: ZIP Datei in den Speicher einlesen

Verfasst: 18.10.2009 17:12
von X360 Andy
Danke dafür, aber den Inhalt der Datei habe ich damit ja auch noch nicht.

Re: ZIP Datei in den Speicher einlesen

Verfasst: 18.10.2009 17:20
von ts-soft
X360 Andy hat geschrieben:Danke dafür, aber den Inhalt der Datei habe ich damit ja auch noch nicht.
Verstehe nicht, der Inhalt befindet sich doch in *mem mit der größe von MemorySize(*mem), den kannste doch
zum Beispiel mit PeekS anzeigen, wenns Text ist oder mit CatchImage(0, *mem, MemorySize(*mem)) wenns ein
Bild ist, usw. Kannste auch als Datei auf Platte schreiben oder was auch immer, was fehlt denn jetzt noch?