Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TSearchRec bei Dateien/Ordner mit Unicode-Namen (https://www.delphipraxis.net/123351-tsearchrec-bei-dateien-ordner-mit-unicode-namen.html)

Ares 31. Okt 2008 08:48


TSearchRec bei Dateien/Ordner mit Unicode-Namen
 
Hallo!

Ich brauche für ein Programm Funktionen die mir eine Liste aller Unterordner oder aller Dateien in einem Verzeichnis liefern. Das ist mit TSearchRec und FindNext() ja kein Problem. Nun wir das Programm aber auf Rechnern eingesetzt bei den viele Ordner und Dateinamen Unicode Zeichen enthalten und hier stößt TSearchRec anscheinend an seine Grenzen.

Hab ich z.B. einen Ordner "Προγράμματα Διαφήμισης" liefert mir TSearchRec den Namen "'??????µµata ??af?µ?s??'". Versuche ich dann diesen Ordner zu öffnen erhalte ich natürlich die Meldung, dass kein Ordner mit diesem Namen existiert...

Ich verwende Delphi 2007, gibt es hier irgendeine Möglichkeit Datei- und Ordnernamen in Unicode zu ermitteln?

Besten Dank!
Ares

NineBerry 8. Nov 2008 00:54

Re: TSearchRec bei Dateien/Ordner mit Unicode-Namen
 
Hallo

Eine praktische Lösung besteht darin, statt MySearchRec.Name auf MySearchRec.FindData.cAlternateFileName zuzugreifen. Dies liefert dir den 8.3 (Dos-kompatiblen) Dateinamen. Dieser enthält garantiert nur ANSI-Zeichen.

Wenn du den Dateinamen nicht nur intern verwenden, sondern auch anzeigen möchtest, musst du größere Geschütze auffahren. Das Problem ist, dass ein Delphi string (vor Delphi 2009) nun mal eben nur Ansi-Zeichen und keine Unicode-Zeichen speichern kann.

Du musst also von Hand die WinAPI-Funktion FindNextFileW() aufrufen und von dort aus den Dateinamen durchgängig in Variablen vom Typ WideString verarbeiten (statt string).

(Oder auf Delphi 2009 umsteigen :mrgreen: )

Neun

Fridolin Walther 8. Nov 2008 02:28

Re: TSearchRec bei Dateien/Ordner mit Unicode-Namen
 
Delphi 2009 kann Unicode "out of the box", Versionen vor 2009 leider nicht. In Deinem Fall musst Du für Unicode Support entweder Drittkomponenten (TntSysUtils mit WideFindFirst/WideFindNext) verwenden oder aber alternativ die Windows API nutzen (MSDN-Library durchsuchenFindFirstFileW und MSDN-Library durchsuchenFindNextFileW).


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz