minizip

Anwendungen, Tools, Userlibs und anderes nützliches.
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

Beitrag von ts-soft »

> Warum schlägt dieser Code dann fehl?
Weil die Strukture als Pointer erwartet wird

Code: Alles auswählen

XIncludeFile "MiniZIP.pbi"
mzfi.unz_file_info
Index = ZIP_GetFileNumber("music.zip","sample1.ogg")
ZIP_GetFileInfo("music.zip",Index,@mzfi)
Result = ZIP_CatchFile("music.zip",Index)

CreateFile(0,"test.ogg")
WriteData(0,Result,mzfi\uncompressed_size)
CloseFile(0)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ts-soft hat geschrieben:Weil die Strukture als Pointer erwartet wird
Du verwendest im Beispiel "sample1.ogg", versuch mal "sample2.ogg".
Windows 10 Pro, 64-Bit / Outtakes | Derek
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

Beitrag von ts-soft »

Fluid Byte hat geschrieben:
ts-soft hat geschrieben:Weil die Strukture als Pointer erwartet wird
Du verwendest im Beispiel "sample1.ogg", versuch mal "sample2.ogg".
Es funktioniert mit beiden, test.ogg entsteht immer mit der richtigen größe
Kiffi hat geschrieben:
Fluid Byte hat geschrieben:Mal am Rande, die PureZIP DLL von gnozal hat damit keine Probleme. :twisted:
was Ihr (Du) mal testen könnte(s)t: Tritt dieser 'Bug' auch mit
UsePNGImageDecoder() auf? Hiermit hat nämlich die PureZIP-Lib Probleme.
Vielleicht gibt es Parallelen?

Grüße ... Kiffi
Habs mal getestet:
zip erstellen:

Code: Alles auswählen

XIncludeFile #PB_Compiler_Home + "include\minizip_include.pbi"

Define.s zip = GetTemporaryDirectory() + "flare.zip"
Define.i FF = ZIP_FileCreate(zip)

If FF
  ZIP_FileAdd(FF, #PB_Compiler_Home + "Examples\Sources\Data\flare.png", "-")
  ZIP_FileClose(FF)
EndIf
und testen mit dem geändertem Beispiel der Hilfe:

Code: Alles auswählen

XIncludeFile #PB_Compiler_Home + "include\minizip_include.pbi"

UseJPEGImageDecoder()
UseTGAImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()

; Enable all the encoders than PureBasic actually supports
;
UseJPEGImageEncoder()
UsePNGImageEncoder()

Define.s zip = GetTemporaryDirectory() + "flare.zip"

If OpenWindow(0, 0, 0, 250, 130, "PureBasic - Image Converter", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  ImageGadget(0, 0, 28, WindowWidth(0), WindowHeight(0), 0, #PB_Image_Border)

  CreateToolBar(0, WindowID(0))
  ToolBarStandardButton(0, #PB_ToolBarIcon_Open)
  ToolBarStandardButton(1, #PB_ToolBarIcon_Save)
  DisableToolBarButton(0, 1, 1)    ; disable the save button

  Repeat
    EventID = WaitWindowEvent()

    If EventID = #PB_Event_Menu  ; ToolBar are acting as menu

      Select EventMenu()

        Case 0  ; Open

           If CatchImage(0, ZIP_CatchFile(zip, 1))
            SetGadgetState(0, ImageID(0))  ; change the picture in the gadget
            DisableToolBarButton(0, 1, 0)    ; enable the save button
            ResizeWindow(0, #PB_Ignore, #PB_Ignore, ImageWidth(0)+4, ImageHeight(0)+34)
          EndIf

          ;           EndIf

        Case 1  ; Save

          Filename$ = SaveFileRequester("Save a picture", Left(Filename$, Len(Filename$)-Len(GetExtensionPart(Filename$))-1), "BMP Format|*.bmp|JPEG Format|*.jpg|PNG Format|*.png", 0)
          If Filename$

            Select SelectedFilePattern()

              Case 0  ; BMP
                ImageFormat = #PB_ImagePlugin_BMP
                Extension$  = "bmp"

              Case 1  ; JPEG
                ImageFormat = #PB_ImagePlugin_JPEG
                Extension$  = "jpg"

              Case 2  ; PNG
                ImageFormat = #PB_ImagePlugin_PNG
                Extension$  = "png"

            EndSelect

            If LCase(GetExtensionPart(Filename$)) <> Extension$
              Filename$ + "." + Extension$
            EndIf

            If SaveImage(0, Filename$, ImageFormat)
              MessageRequester("Information", "Image saved successfully", 0)
            EndIf

          EndIf

      EndSelect

    EndIf

  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button

EndIf

End   ; All is automatically freed by PureBasic
Mit IncludeBinary hab ich vorsichtshalber auch getestet, keine Problem bis
jetzt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ts-soft hat geschrieben:Es funktioniert mit beiden, test.ogg entsteht immer mit der richtigen größe
Führe die Datei mal aus! :wink:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ts-soft hat geschrieben:Weil die Strukture als Pointer erwartet wird
Was genau hat es eigentlich damit auf sich? Habe ich ja vorher auch nicht als Pointer übergeben und funktioniert trotzdem. Es scheitert nur bei Dateien die eine ganz bestimmte Dateigröße überschreiten und das ohne UseOGGSoundDecoder(). Also muss es doch zwangsläufig etwas mit MiniZIP zu tun haben.

Ich hab' mir die beiden Dateien noch mal mit 'Beyond Compare' im hexadezimalen Vergleich angesehen. Die Datei die auf Platte gespeichert wird hat zwar einen korrekten Header aber der Rest ist Schweizer Käse bzw. die beiden Dateien werden wohl miteinander "gemischt":


Bild

GoldWave kann die beschädigte OGG-Datei lesen, allerdings fehlt die Hälfte.
Windows 10 Pro, 64-Bit / Outtakes | Derek
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

Beitrag von ts-soft »

Beim Streaming geht was schief :oops:
Werde es wohl in kürze behoben haben, bzw. notfalls auf das Streaming
verzichten.

// edit
Bei ExtractFile oder ExtractArchive funktionierts fehlerfrei, keine
Unterschiede in diesem Beyond Compare 3, nettes Tools, damit werde ich
den Fehler wohl rausbekommen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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

Beitrag von ts-soft »

Update

Fehler in ZIP_CatchFile() gefixed

:allright: danke Fluid Byte für den Fehlerreport!

Gruß
Thomas

// edit
PS: Deine Demo.pb funzt jetzt auch!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ts-soft hat geschrieben:Meine Funktion ist also Fehlerfrei, ...
ts-soft hat geschrieben:Beim Streaming geht was schief :oops:
:twisted:
ts-soft hat geschrieben:Unterschiede in diesem Beyond Compare 3, nettes Tools, damit werde ich den Fehler wohl rausbekommen
Beyond Compare ist eines der besten Tools die ich in den letzten Jahren gefunden habe. Somit kann ich auf einfache Weise alle nötigen Dateien für ein Backup auf ein entsprechendes Medium spiegeln. Und vor allem nur Dateien die neu hinzugekommen sind bzw. geändert wurden. Außerdem fällt die lästige Komprimierung weg die ich bei jedem anderen Tool gesehen habe. Das ist zwar nett gemeint aber überflüssig wenn man schnell Änderungen übernehmen will (und Platzmangel ist eh kein Thema mehr). Toptool!
ts-soft hat geschrieben:Fehler in ZIP_CatchFile() gefixed
Perfekt. Nun kann ich mein Werk vollenden! :mrgreen:
ts-soft hat geschrieben::allright: danke Fluid Byte für den Fehlerreport!
Keine Ursache. Das war es ja wohl absolut wert. :D
Windows 10 Pro, 64-Bit / Outtakes | Derek
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

Beitrag von ts-soft »

Fluid Byte hat geschrieben:Perfekt. Nun kann ich mein Werk vollenden! :mrgreen:
Und ich bald beginnen (mein neues Werk, was MiniZip benötigt) :mrgreen:

// Nachtrag:
@Fluid Byte
Hier eine beschleunigte Version von ZIP_AccessArchive aus dem Democode:

Code: Alles auswählen

Procedure ZIP_AccessArchive(Filename.s, *Length.LONG)
	Protected *Mem, ZIPFile$ = "music.zip"

	*Mem = ZIP_CatchFile(ZIPFile$, ZIP_GetFileNumber(ZIPFile$, Filename))
  If *Mem
    *Length\l = MemorySize(*Mem)
    ProcedureReturn *Mem
  EndIf
EndProcedure
MemorySize() sollte schneller als ZIP_GetFileInfo() sein
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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

Beitrag von ts-soft »

Update

hinzugefügt:
ZIP_IsZipArchive(), damit kann man Archive (auch Exen u. ä) vorm entpacken überprüfen.

repariert und verbessert:
Unicode-Support

Alle Dateioperationen beschleunigt!
Danke auch an edel, der mir ein paar C-Header angepaßt hat, um dies zu ermöglichen :allright:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten