ZIP Datei in den Speicher einlesen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

ZIP Datei in den Speicher einlesen

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ZIP Datei in den Speicher einlesen

Beitrag 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
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: ZIP Datei in den Speicher einlesen

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ZIP Datei in den Speicher einlesen

Beitrag 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
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Re: ZIP Datei in den Speicher einlesen

Beitrag 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.
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: ZIP Datei in den Speicher einlesen

Beitrag von X360 Andy »

thx for the different ways, ill try them all when im back home on my pc during the week.[@twice]
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: ZIP Datei in den Speicher einlesen

Beitrag 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 .... :(
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ZIP Datei in den Speicher einlesen

Beitrag 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!
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: ZIP Datei in den Speicher einlesen

Beitrag von X360 Andy »

Danke dafür, aber den Inhalt der Datei habe ich damit ja auch noch nicht.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ZIP Datei in den Speicher einlesen

Beitrag 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?
Antworten