Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - FindFirstFileW findet nichts...
Ares - Sa 01.11.08 10:26
Titel: FindFirstFileW findet nichts...
Hallo!
ich versuche eine Funktion zu schreiben, die mir eine Liste aller Unterordner eines Verzeichnisses liefert. Da auch Unicode-Namen berücksichtigt werde sollen will ich mit FindFirstFileW arbeiten. Hierzu finden sich allerlei Beiträge in denen Suchprozeduren mit FindFirstFileW implementiert werden. Bei mir will das Ganze aber nicht so recht funktionieren, da FindFirstFileW einfach nichts findet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| function GetSubDirList(Path: String; Recurse: boolean = true) : TStrings; var hFind: THandle; FindFileData: WIN32_FIND_DATAW; i: integer; begin Result:=TStringList.Create;
hFind := FindFirstFileW(PWideChar(Path), FindFileData); if hFind = INVALID_HANDLE_VALUE then begin ShowMessage('Nichts gefunden...'); end else try repeat ... until FindNextFileW(hFind,FindFileData) = false; finally Windows.FindClose(hFind); end;
if recurse then begin ... end; end; |
Das Problem ist, dass egal was ich versucht habe immer "Nichts gefunden..." ausgegeben wird, hFind ist nach dem Aufruf von FindFirstFileW also ein ungültiges Handle...
Der Pfad mit dem ich die Prozedur zum testen aufrufe, "C:\Test\" existiert definitiv und enthält auch einige Dateien. Wie muss ich FindFirstFileW aufrufen, damit auch was gefunden wir?
Besten Dank
Ares
Bernhard Geyer - Sa 01.11.08 10:39
wenn Path ein String ist wird nur unter Delphi 2009 funktionieren.
Unter Delphi < 2009 solltet du dir die vom Compiler erzeugte Warnung mal durchlesen!
Delete - Sa 01.11.08 10:42
Versuch es mal so:
Delphi-Quelltext
1:
| hFind := FindFirstFileW(PWideChar(WideString(Path)), FindFileData); |
Ares - Sa 01.11.08 10:48
Bernhard Geyer hat folgendes geschrieben : |
wenn Path ein String ist wird nur unter Delphi 2009 funktionieren.
Unter Delphi < 2009 solltet du dir die vom Compiler erzeugte Warnung mal durchlesen! |
Ok, die Compiler Warnung hatte ich übersehen... Wieso wäre das unter Delphi 2009 anders? Ich weiß zwar, dass dort die Unicode-Unterstützung start verbessert wurde, aber wie wirkt sich das auf Strings auch. Können diese dort auch Unicode-Daten enthalten?
DeddyH hat folgendes geschrieben : |
Versuch es mal so:
Delphi-Quelltext 1:
| hFind := FindFirstFileW(PWideChar(WideString(Path)), FindFileData); | |
Danke, das funktioniert prima!
Bernhard Geyer - Sa 01.11.08 12:12
Ares hat folgendes geschrieben : |
Wieso wäre das unter Delphi 2009 anders? Ich weiß zwar, dass dort die Unicode-Unterstützung start verbessert wurde, aber wie wirkt sich das auf Strings auch. Können diese dort auch Unicode-Daten enthalten? |
Bis D2007 ist String = Ansistring (und PChar = PAnsiChar)
ab D2009 ist String = Unicodestring (und PChar = PWidechar)
Und damit passt es für dein beispiel.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!