Createpack - Probleme mit Umlauten in Dateinamen

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Createpack - Probleme mit Umlauten in Dateinamen

Beitrag von bin_neu_hier »

Hallo allerseits,

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?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Immernoch: Createpack - Probleme mit Umlauten in Dateinamen

Beitrag von bin_neu_hier »

Hallo,

dachte zuerst, dass das Umlaut-Problem mit der Wahl der Zip-Art erledigt sei, isses aber nicht.

In der Zip-Datei werden die Umlaute falsch dargestellt, beim Entpacken mit 7Zip werden sie wieder richtig geschrieben. Andere Zip-Programme schreiben die entpackten Dateinamen dann mit den falschen Umlauten, z. B. der in FreeCommander integrierte Enpacker. Oder der in Win10 integrierte Enpacker, ...

Habe im Forum alte Einträge gesehen, wo dieser (oder ein sehr ähnlicher) Bug als beseitigt beschrieben wurde. Habe PB5.71 (auf UTF eingestellt) und das gleiche Problem, z.b. das ü wird zu ├╝. Wer kann da helfen? Müssen die Dateinamen beim
AddPackFile-Befehl irgendwie "vorbehandelt" werden? Wenn ja, wie?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: Createpack - Probleme mit Umlauten in Dateinamen

Beitrag von Thorsten1867 »

Habe bei PackExModule.pbi jetzt einen Workaround eingebaut.
Solange du das Module benutzt, kannst du normal mit Umlauten arbeiten. Bei fremden Entpackern bleiben die Dateinamen aber noch halbwegs lesbar.
z.B. "Äpfel.txt" wird zu "A'pfel" oder "Süßes.txt" zu "Su'!3es.txt".
Keine perfekte Lösung, aber ein guter Kompromiss, wenn man es auch mit Fremdpackern auslesen will.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Createpack - Probleme mit Umlauten in Dateinamen

Beitrag von bin_neu_hier »

Hallo Thorsten1867,

vielen Dank für Deine Mühe, aber das hat keinen Sinn. Man kann mit der Befehlszeilenversion von 7zip recht gut arbeiten. Schade, dass das mit PB nicht so gut geht, erst recht, wo das Problem wohl schon einige Zeit bekannt ist. Da hat schon vor einiger Zeit jemand im Board gemeint, dass Probleme mit Umlauten längst erledigt sein müssten, aber denkste - gibt's auch 2019 noch.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Createpack - Probleme mit Umlauten in Dateinamen

Beitrag von bin_neu_hier »

Hallo Mijikai,

habe gar nicht ausprobiert, ob PB richtig entpacken würde. Meine Anwendung stellt nur das Archivieren als Datensicherung zur Verfügung. Mit ziemlicher Wahrscheinlichkeit werden die gesicherten Daten nie wieder benötigt. Aber wenn doch, dann wäre die Rekonstruktion der Datenstände relativ tricky - leichtfertiges wiederherstellen per Mausklick könnte mehr Schaden als Nutzen nach sich ziehen.

Da meine Software nur einen User hat, träfe es dann mich, die Daten zu sichten und ggf. beschädigte oder fehlende Dateien zu ersetzen - mit etwas Glück nur alle Jubeljahre mal. Wenn weitere User hinzukämen (theoretisch möglich, aber eher unwahrscheinlich), wäre das Programmieren geeigneter Wiederherstellungsroutinen sicherlich erforderlich.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Antworten