AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

Ein Thema von UliBru · begonnen am 8. Mär 2012 · letzter Beitrag vom 8. Mär 2012
Antwort Antwort
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#1

Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 09:36
Hallo,
ich bearbeite Verzeichnisse rekursiv mit Stringlisten und TSearchRec. Dabei bin ich nun wohl auch auf ein Unicode-Problem gestossen. Verstehen tue ich es nicht wirklich. Strings sind doch neuerdings in Delphi Unicode-Strings. Wenn dann alles als String verarbeitet wird, weshalb gibt es dann Probleme beim Verarbeiten der Dateien? Und bei einer writeln-Ausgabe steht dann z.B.
Herbert Gro¨nemeyer
was vorher im Verzeichnis
Herbert Grönemeyer
war. Ergo passiert da was im Hintergrund mit den Strings, was doch eigentlich nicht sein sollte. Kann mir das einer erklären und wie man es denn richtig macht?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 10:01
Delphi-Quellcode:

uses
  SysUtils,Windows;
  Function Get4Oem(s:String):AnsiString;
    begin
      SetLength(Result,Length(s));
      CharToOem(Pchar(s),PAnsiChar(Result));
    end;
begin
  try
     Writeln('Grönemayer');

     Writeln(Get4Oem('Grönemayer'));
     Readln;
    { TODO -oUser -cConsole Main : Code hier einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 10:22
Das Beispiel mag klappen, ich verstehe trotzdem damit nichts. Vielleicht war mein Beispiel zu simpel.
Ich geh davon aus, dass z.B. ein Nutzer in Dänemark irgendwelche Dateinamen mit speziellen Zeichen hat, im Extremfall wäre es ein Nutzer in Taiwan.
Da wird im Explorer also irgendwas angezeigt.
Delphi liest nun das Verzeichnis mit FindFirst und FindNext und speichert das Ergebnis in Unicode-Strings.
Da hilft mir denn doch keine Umwandlung in Ansistrings, wenn ich denn z.B. die gefundenen Dateien öffnen/bearbeiten/mit_leicht_geänderten_Dateinamen_abspeichern und dem Anwender den Dateinamen in einem Protokoll angeben möchte.

Eigentlich erwarte ich, dass die gefundenen Dateinamen einfach so verarbeitbar wären. Wozu sonst Unicode?
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 10:33
Ist das vielleicht einfach nur ein Anzeigeproblem in der Konsole? Ich habe hier Delphi 2009, und da gibt ein simples writeln('Grönemeyer'); auf der Konsole ein "Gr÷nemeyer" aus. Ich hatte bei Delphi2009 bisher keine Probleme mit Unicode-Dateinamen, und ich denke nciht , dass in XE2 da welche eingebaut wurden.
The angels have the phone box.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 10:44
Die Konsolausgabe arbeitet mW immer mit Ansistrings.
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 11:08
Also ich hab mal grad einen Test gemacht:
aus 輝遠報價單.flac wurde doch richtigerweise eine Datei 輝遠報價單_processed.flac erzeugt.
In der Protokolldatei steht aber nur ein ?????_processed.flac.

1. Demzufolge scheint das Writeln der falsche Befehl zu sein, das einfache Schreiben in eine textfile klappt so nicht. Da schau ich mal wie ich sonst den Unicode-String richtig mitprotokolliere (TStrings.SaveToFile reicht leider nicht, es muss in der log-Datei angehängt werden).

2. Ansonsten muss ich doch noch mal beim Anwender nachfragen, warum bestimmte Dateien nicht bearbeitet wurden. Er hat berichtet, dass eben besagtes Grönemeyer richtig verarbeitet wird, nachdem er es in Groenemeyer umbenamst hat. Mir steht seine Datei nicht zur Vefügung, eine Testdatei hier mit dem ö im Namen (im Explorer einfach so definiert) wird bearbeitet UND es wird auch korrekt protokolliert.

Also zwei Probleme zu lösen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Verzeichnis mit Unicode-Dateinamen rekursiv abarbeiten

  Alt 8. Mär 2012, 11:14
1. Demzufolge scheint das Writeln der falsche Befehl zu sein, das einfache Schreiben in eine textfile klappt so nicht.
Delphi-Textfiles sind per definition nicht Unicode. Dazu wurden diese Uraltfunktionen nicht aktualisiert.

Da schau ich mal wie ich sonst den Unicode-String richtig mitprotokolliere (TStrings.SaveToFile reicht leider nicht, es muss in der log-Datei angehängt werden).
Sollte doch mit ein paar Pascal-Zeilen lösbar sein (Filestream öffnen, Text anhängen (mit Zeilenumbruch)) und stream schließen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz