habe mir 2 kleine Zip-Routinen geschrieben, die (fast) funktionieren. Problem: Bei den mit 7Zip entpackten Dateien werden die Umlaute in den Dateinamen durch "Schrott" ersetzt. Wie kann man das Problem lösen?
Code: Alles auswählen
UseLZMAPacker()
Global ZipType$ = ".7z"
Global NewList files_list$()
Global NewList files2zip_list$()
Procedure findfiles(ppath$)
;liest alle Dateieinträge des Verzeichnisses ppath$ (einschl. Unterverzeichnisse) in die files_list$()
PathAddBackslash_(ppath$)
Dir = ExamineDirectory(#PB_Any, ppath$, "*.*")
If Dir
While NextDirectoryEntry(Dir)
Name$ = DirectoryEntryName(Dir)
Type = DirectoryEntryType(Dir)
If Name$ = "." Or Name$ = ".." : Continue : EndIf
If Type = #PB_DirectoryEntry_File
AddElement(files_list$())
files_list$() = ppath$ + name$
EndIf
If Type = #PB_DirectoryEntry_Directory
findfiles(ppath$ + Name$)
EndIf
Wend
FinishDirectory(Dir)
EndIf
EndProcedure
Procedure zipdirto(psource$, ziptarget$)
check = FileSize(psource$)
If check >= 0
;ist eine Datei
ElseIf check = -1
;nicht gefunden
ElseIf check = -2
;ist ein Verzeichnis
ClearList(files_list$())
ClearList(files2zip_list$())
PathAddBackslash_(psource$)
findfiles(psource$)
ForEach files_list$() ;kopiert die Liste (files2zip_list$()) nach files2zip_list$()
AddElement(files2zip_list$())
files2zip_list$() = files_list$()
Next
ziptarget$ = ziptarget$ + ZipType$
EndIf
If check = -2
check = FileSize(ziptarget$)
If check > 0
err = RenameFile(ziptarget$, GetPathPart(ziptarget$) + GetFilePart(ziptarget$, #PB_FileSystem_NoExtension) + "_alt_" + Str(Date()) + "." + GetExtensionPart(ziptarget$))
Delay(100)
If err = 0
ProcedureReturn -1
;vorhandene Datei kann nicht umbenannt werden
EndIf
EndIf
zip = CreatePack(#PB_Any, ziptarget$, #PB_PackerPlugin_Lzma, 5)
ForEach files2zip_list$()
AddPackFile(zip, files2zip_list$(), RemoveString(files2zip_list$(),psource$,#PB_String_NoCase))
Next
ClosePack(zip)
EndIf
EndProcedure
Procedure zipfilesto(pextlist$, psource$, ziptarget$)
If pextlist$ = ""
ProcedureReturn -2
;Extensionstring leer
EndIf
ClearList(files_list$())
ClearList(files2zip_list$())
PathAddBackslash_(psource$)
findfiles(psource$)
If CountString(pextlist$,"|") = 0
pextlist$ + "|"
EndIf
n = 1
While StringField(pextlist$, n, "|") <> ""
ext$ = StringField(pextlist$, n, "|")
ForEach files_list$()
If LCase(GetExtensionPart(files_list$())) = LCase(ext$)
AddElement(files2zip_list$())
files2zip_list$() = files_list$()
EndIf
Next
n + 1
Wend
ziptarget$ = ziptarget$ + ZipType$
check = FileSize(ziptarget$)
If check > 0
err = RenameFile(ziptarget$, GetPathPart(ziptarget$) + GetFilePart(ziptarget$, #PB_FileSystem_NoExtension) + "_alt_" + Str(Date()) + "." + GetExtensionPart(ziptarget$))
Delay(100)
If err = 0
ProcedureReturn -1
;vorhandene Datei kann nicht umbenannt werden
EndIf
EndIf
zip = CreatePack(#PB_Any, ziptarget$, #PB_PackerPlugin_Lzma, 5)
ForEach files2zip_list$()
AddPackFile(zip, files2zip_list$(), RemoveString(files2zip_list$(),psource$,#PB_String_NoCase))
Next
ClosePack(zip)
EndProcedure
;zipdirto(quellverzeichnis, Speicherort und Name der Zip-Datei (ohne "zip"; wird vom Prog eingefügt)
;zipfilesto(String mit Dateinamenserweiterungen, |-getrennt, quellverzeichnis, Speicherort und Name der Zip-Datei (ohne "zip"; wird vom Prog eingefügt)
edit: Mit UseZipPacker() und #PB_PackerPlugin_Zip gibt es kein Umlaute-Problem. Bug oder Feature?