![]() |
Problem beim Dateiensuchen -> Unicode + Gesperrte Ordner
Ich führe ein Dateilisting mit folgender Methode durch.
Leider habe ich auf meiner Festplatte ein paar Dateien und ORDNER, deren Dateiname oder Ordnername Unicode (Japanische Schriftzeichen) enthält. Das Listing versucht den Ordner zu öffnen, öffnet sich aber immer wieder selbst (rekursiv..) und fährt sich dort fest. Das gleiche passiert mit einem Systemordner, der ebenfalls "für den Publikumsverkehr geschlossen" ist.^^ Wie kann ich diese Fehler abfangen? Gibt es eine Funktion die Unicode erkennt? Und eine die blöde nicht öffnen-bare Ordner erkennt? :?: :?: Funktion (Ausschnitt):
Delphi-Quellcode:
Edit: ich weiß, die Rekusivität is hier nicht zu sehen, aber hier in der if müsste etwas hin was diese blöden Sachen abfängt.
if FindFirst('*', faAnyFile, searchResult) = 0 then
begin repeat Application.ProcessMessages; SetLength(ergebnisse, (Length(ergebnisse)+1)); if ((searchResult.Attr and faDirectory) = faDirectory) then begin ergebnisse[i].is_directory := true; ergebnisse[i].name := searchResult.Name; ergebnisse[i].size := 0; end else begin ergebnisse[i].is_directory := false; ergebnisse[i].name := searchResult.Name; ergebnisse[i].size := searchResult.Size; end; Application.ProcessMessages; Inc(i); until FindNext(searchResult) <> 0; FindClose(searchResult); end; |
Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord
Du musst die Unicode API-Funktionen verwenden. Die VCL unterstützt so kein Unicode. Entweder nimmst du die TNT-Unicode Controls mit der TNT Unicode API Unterstützung oder du die entsprechenden Funktionen (FindFirstFileW) direkt (Sind schon in der Windows.pas deklariert.)
|
Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord
Also die FindFirst durch "FindFirstFileW" ersetzen?
Und die FindNext durch "FindNextFileW" oder was? muss ich was beachten? weil ich der Delphi7Hilfe stehen die Funktionen nicht :-( Und was is mit dem Drecks-Systemordner? Danke ;-) |
Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord
Zitat:
nur wie Luckie schon sagte hat's die VCL nicht so mit'm Unicode und da die von Borland Konsequent sind, gibt's auch fast kein Unicode in der WinAPI-Hilfe. (OK, im MSDN gibt's davon och nicht viel) Allerdigns sind die Befehle gleich den ANSI-Versionen aufgebaut, nur halt die String als Wide... oder du schaust einfach mal ins MSDN > ![]() [add] ich hoffe du hast i initialisiert? Ansonsten ... wenn ich i umstelle und den Code kürze, dann kommt ja dieses raus und einen Fehler kann ich da nicht entdecken, jedenfalls keinen welcher der ein "Festfahren"? erklären würde.
Delphi-Quellcode:
if FindFirst('*', faAnyFile, searchResult) = 0 then
begin repeat i := Length(ergebnisse); SetLength(ergebnisse, i + 1); ergebnisse[i].is_directory := (searchResult.Attr and faDirectory) = faDirectory; ergebnisse[i].name := searchResult.Name; ergebnisse[i].size := 0; until FindNext(searchResult) <> 0; FindClose(searchResult); end; Zitat:
|
Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord
na, ich poste hier mal den kompletten Code.. ^^
Delphi-Quellcode:
Hier wird die Funktion aufgerufen:
function GetDirContents(pfad: String; prestr: String): Integer;
var searchResult : TSearchRec; ergebnisse: TSRDynArray; SL, tmp: TStringlist; i, j: integer; begin i := 0; j := 0; SetLength(ergebnisse, 0); SetCurrentDir(pfad); FMain.AppendStringToFile(prestr+' Verzeichnis von '+pfad, pfad_zur_liste); FMain.AppendStringtoFile(prestr+' ', pfad_zur_liste); if FindFirst('*', faAnyFile, searchResult) = 0 then begin repeat Application.ProcessMessages; SetLength(ergebnisse, (Length(ergebnisse)+1)); if ((searchResult.Attr and faDirectory) = faDirectory) then begin ergebnisse[i].is_directory := true; ergebnisse[i].name := searchResult.Name; ergebnisse[i].size := 0; end else begin ergebnisse[i].is_directory := false; ergebnisse[i].name := searchResult.Name; ergebnisse[i].size := searchResult.Size; end; Application.ProcessMessages; Inc(i); until FindNext(searchResult) <> 0; // Must free up resources used by these successful finds FindClose(searchResult); for i := 0 to (Length(ergebnisse)-1) do begin Application.ProcessMessages; if (ergebnisse[i].is_directory) then begin if ((ergebnisse[i].name <> '.') AND (ergebnisse[i].name <> '..')) then begin Application.ProcessMessages; GetDirContents(pfad+ergebnisse[i].name+'\', prestr+' '); SetCurrentDir(pfad); end; end else begin Application.ProcessMessages; FMain.AppendStringtoFile(prestr+' - '+ergebnisse[i].name+' '+IntToStr(ergebnisse[i].Size)+' Bytes', pfad_zur_liste); end; end; Application.ProcessMessages; FMain.AppendStringtoFile(prestr+' ', pfad_zur_liste); end else begin FMain.AppendStringtoFile(prestr+' Keine Elemente.', pfad_zur_liste); FMain.AppendStringtoFile(prestr+' ', pfad_zur_liste); end; Result := 0; end;
Delphi-Quellcode:
GetDirContents('F:\', '');
|
Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord
Hat keiner eine Idee?
Und das mit den WinAPI Funktionen hab ich nicht ganz verstanden.. Kann das jemand mal bitte etwas genauer erläutern? Was muss ich tun damit Unicode verwendet werde kann? |
Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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