Seite 1 von 1

Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 07:55
von Rudi
- es lassen sich nur ZIPs bis zu einer bestimmte Größe erstellen/entpacken (2 GB?) - kann ich noch mit leben
- es kann nur eine begrenzte Anzahl an Dateien gepackt werden (500?)
- es lassen sich keine leeren Ordner packen
- Ordner in ZIPs werden beim Entpacken nicht angelegt
- wenn eine leere Datei gepackt wird, dann wird der erfolgreiche Packvorgang als Fehler moniert: 0 = 0 Byte und 0 = Fehler
- Dateien mit deutschen Umlauten werden mit chinesischen Umlauten versehen
- wenn versucht wird, eine bereits gepackte Datei noch einmal zu packen, dann lassen sich keine weiteren Dateien mehr packen (kackt ab)

teste:

Code: Alles auswählen

UseZipPacker()

If CreatePack(0, "D:\mycompressedfiles.zip")
	Repeat
	File$ =	OpenFileRequester("", "", "", 0)
	AddPackFile(0, File$, GetFilePart(File$))
Until File$ = #NUL$
ClosePack(0)
EndIf
Warum ist die Einrückung hier falsch?

Getestet unter Win7 x64 und PB 5.11 x86, Unicode und ASCII

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 09:01
von RSBasic
Rudi hat geschrieben:Warum ist die Einrückung hier falsch?
Markiere den Code und drücke Strg + I, dann wirds auch komplett richtig eingerückt.

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 09:36
von ts-soft
Rudi hat geschrieben:- es lassen sich nur ZIPs bis zu einer bestimmte Größe erstellen/entpacken (2 GB?) - kann ich noch mit leben
so ist es auch in der Hilfe dokumentiert!
Rudi hat geschrieben: - es lassen sich keine leeren Ordner packen
das ist eine fehlende Funktion, also ein FeatureRequest und kein Bug. Läßt sich auch leicht umgehen, entsprechenden Code hab ich bereits mehrmals gepostet.
Rudi hat geschrieben: - Ordner in ZIPs werden beim Entpacken nicht angelegt
Das ist ja wohl normal, bzw. Aufgabe des Programmierers. Ein optionales Flag (wieder FeatureRequest) wäre
vielleicht sinnvoll.
Rudi hat geschrieben: - wenn eine leere Datei gepackt wird, dann wird der erfolgreiche Packvorgang als Fehler moniert: 0 = 0 Byte und 0 = Fehler
Das ist Systembedingt und wurde bereits erklärt.
Rudi hat geschrieben: - Dateien mit deutschen Umlauten werden mit chinesischen Umlauten versehen
Kann ich mit der aktuellen PB Version nicht nachvollziehen, wurde bereits gefixed.
Bugreports zu alten PB-Versionen sind nicht sehr sinnvoll.

Gruß
Thomas

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 09:40
von Kiffi
Rudi hat geschrieben:- es kann nur eine begrenzte Anzahl an Dateien gepackt werden (500?)
hier ein Workaround: http://www.purebasic.fr/german/viewtopi ... 11#p322211

Zwar nicht das Gelbe vom Ei, aber besser als nix.

Grüße ... Kiffi

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 10:04
von ts-soft
Nachtrag:
Ausserdem wäre es wesentlich sinnvoller, je "vermuteten" Bug, einen Thread zu öffnen.
Alles in eins macht ein sinnvolles weiterbearbeiten nur unnötig schwer, ausserdem hört
sich das ganze mehr wie ein "Frustreport" an, was es ja überwiegend auch ist.

Bugreports machen immer nur zur aktuellen Version einen Sinn!

Nachtrag:
Hier noch die Crossplattformlösung zum hinzufügen von leeren Verzeichnissen:

Code: Alles auswählen

Procedure AddEmptyDir(ID, name.s)
  If name <> ""
    ReplaceString(name, "\", "/", #PB_String_InPlace)
    If Right(name, 1) <> "/" : name + "/" : EndIf
    ProcedureReturn AddPackMemory(ID, 0, 0, name)
  EndIf
EndProcedure

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 20:09
von Rudi
Danke erstmal für die Antworten!

@RSBasic
Ja, geht bei mir aber erst wieder mit der neuen Version - kann keinen Fehler in den Einstellungen finden.

@all
Zum Erstellen von Pfaden behelfe ich mich mit:
MakeSureDirectoryPathExists_() bei ASCII und
SHCreateDirectory_() bei Unicode
Diese APIs sind aber auch nicht ganz sicher.

Das Problem mit den Umlauten besteht aber auch noch in der neuen PB-Version. Oder hat das mal jemand getestet? Dafür ist doch der Code da!

Leider ist niemand auf den letzten Punkt eingegangen.
Da behelfe ich mich damit, dass ich vor dem Packen einer Datei die ZIP auf ein Vorhandensein der aktuellen Datei durchsuche:

Code: Alles auswählen

UseZipPacker()
If CreatePack(0, "D:\mycompressedfiles.zip")
	Repeat
	File$ =	OpenFileRequester("", "", "", 0)
	Exist = 0
	If ExaminePack(0) ;bereits gepackte Dateien durchsuchen
		While NextPackEntry(0)
			Select PackEntryType(0)
				Case #PB_Packer_File
					If PackEntryName(0) = GetFilePart(File$)
						Exist = 1
						Break
					EndIf
			EndSelect
		Wend
	EndIf
	
	If Exist = 0
		AddPackFile(0, File$, GetFilePart(File$))
	EndIf
Until File$ = #NUL$
ClosePack(0)
EndIf

Bitte mal testen!

Also ein ziemlicher Umstand, bis man herausgefunden hat, warum das nicht geht und wie man das Problem lösen kann. Ja, das ist frustrierend, ts-soft.
Die Lib ist also noch sehr verbesserungswürdig. Schließlich soll sie doch dem Anwender die Arbeit erleichtern.

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 05.05.2014 20:23
von ts-soft
Rudi hat geschrieben: Die Lib ist also noch sehr verbesserungswürdig. Schließlich soll sie doch dem Anwender die Arbeit erleichtern.
Da stimme ich Dir zu, es fehlt noch eine Menge, siehe:
http://www.purebasic.fr/english/viewtop ... 45#p399245

Zip64-Support ist in der zugrunde liegenden libzip: http://www.nih.at/libzip/ ,
Version 0.11.0 bereits implementiert, aber leider für die Funktionen in PB nicht angepaßt.
(grössere Archive als 2 GB)

Ich hoffe mal, PB5.30 wird auf libzip 0.11.2 oder höher basieren und mehr Funktionalität bieten.

Gruß
Thomas

Re: Bugs im ZIP-Packer unter Windows

Verfasst: 06.05.2014 07:53
von Rudi
Habe jetzt mal die Version 5.22 getestet. Mit der scheinen sich die letzten beiden Punkte erledigt zu haben.
Damit kann ich schon ganz gut leben.

Was ich allerdings nicht verstehe, ist, dass PB als Rückgabewert nicht auch "-1" liefern können soll?!
Bei z.B. FileSize() geht das doch auch!