Bug Windows TFileSearcher unter FPC Trunc

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Bug Windows TFileSearcher unter FPC Trunc

Beitrag von Michl »

Ich habe ein Problem mit dem TFileSearcher (genutzt in FindAllFiles und FindAllDirectories) unter Windows7 64bit, Lazarus 1.5 r49558M FPC 3.1.1 i386-win32-win32/win64.

Anbei ein kleines Testprogramm, das zeigt, dass Verzeichnisse mit Umlauten nicht richtig dargestellt werden, bzw. keine Files in diesen Verzeichnissen gesucht werden:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  FS: TFileSearcher;
begin
  Memo1.Clear;
  FS := TFileSearcher.Create;
  FS.OnFileFound := @FileFound;
  Memo1.Lines.Add('Dateien im Programmverzeichnis:');
  FS.Search(ExtractFilePath(ParamStr(0)), AllFilesMask, True);
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Dateien im Unterverzeichnis "Dir_ÄÖÜ":');
  FS.Search(ExtractFilePath(ParamStr(0)) + '\Dir_ÄÖÜ', AllFilesMask, True);
  FS.Free;
end;
 
procedure TForm1.FileFound(FileIterator: TFileIterator);
begin
  Memo1.Lines.Add(FileIterator.FileName);
  writeln(UTF8ToSys(FileIterator.FileName));
end;


Ich habe für mich auch einen kleinen Patch geschrieben, der dieses Fehlverhalten hier beseitigt. Da aber die Konvertierung vom RawbyteString in einen UTF8String ein ziemliches Gewurstel ist, wollte ich fragen, ob jemand eine bessere Lösung hat?!

Code: Alles auswählen

PathInfo.Name := SysToUTF8(UTF8String(PathInfo.Name));

Bsp. und Patch anbei.

Interessieren tät mich auch, wie das Verhalten unter einem anderen OS ist, bzw. was die Konvertierung dort bewirkt.

EDIT: Dateien gelöscht, da sie, falls sie jemanden interessieren, auch vom Bugtracker geladen werden könnten.
Zuletzt geändert von Michl am So 19. Jul 2015, 19:33, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Bug Windows TFileSearcher

Beitrag von Michl »

Ich habe selber eine bessere Möglichkeit der Konvertierung gefunden, werde das mal so in den Bugtracker geben. Mal sehen...

Code: Alles auswählen

var
  Dummy: String;   
...
  Dummy := '';
  Insert(PathInfo.Name, Dummy, 1);
  PathInfo.Name := Dummy;   


Edit: http://bugs.freepascal.org/view.php?id=28406

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten