![]() |
FindFirst/FindNext BUG
Liste der Anhänge anzeigen (Anzahl: 2)
Der folgende Code findet auf meinen Platten nicht alle Dateien.
Auf meiner "G"-Festplatte findet er alles einwandfrei, aber z.B. auf meiner "F"-Festplatte fidet er nichts.
Delphi-Quellcode:
Beim Debuggen der Funktion ist mir aufgefallen das FindFirst für fsr.Attr = 8208 zurückliefert.
procedure TForm1.ReadDir(path : string; sl : TStrings);
var Fsr : TSearchRec; FFileAttrs: Integer; FName : string; begin path := IncludeTrailingPathDelimiter(path); FFileAttrs := faAnyFile; if FindFirst(Path + '*.*', FFileAttrs, Fsr) = 0 then begin repeat if (fsr.Attr and faDirectory) = fsr.Attr then begin if copy(fsr.name,1,1) <> '.' then ReadDir(Path+fsr.name, sl); end else if (fsr.Attr and FFileAttrs) = fsr.Attr then begin if copy(fsr.Name,1,1) <> '.' then begin FName := path+fsr.Name; sl.add(FName); end; end; until FindNext(fsr) <> 0; FindClose(fsr); end; end; Kann das mal jemand überprüfen ? PS : Win XP-Pro SP2 Delphi 2005 [eng] Architect Trail [edit=sakura] D2005 aus dem Titel entfernt. Mfg, sakura[/edit] |
Re: [D2005] FindFirst/FindNext BUG
Zitat:
|
Re: [D2005] FindFirst/FindNext BUG
Keine Ahnung von einen Bug aber mit dem was ich mir gebastelt habe funktioniert jedes Laufwerk.
Code:
Damit habe ich noch nie problemme gehapt.
procedure THaupt.SEARCH_DIR(Dir, Filter : string; var List : TStringList);
var SEARCH: TSearchRec; RES: integer; begin Application.ProcessMessages; RES := findfirst(Dir+'\'+Filter,faanyfile-faDirectory,SEARCH); try while RES = 0 do begin if (SEARCH.Attr and faDirectory) = 0 then begin List.Add(Dir + '\' + SEARCH.Name); Application.ProcessMessages; end; RES := findnext(SEARCH); end; finally findclose(SEARCH); end; RES := findfirst(Dir+'\'+'*.*',faanyfile,SEARCH); try while RES = 0 do begin if (SEARCH.Name <> '.') and (SEARCH.Name <> '..') and ((SEARCH.Attr and faDirectory) <> 0) then SEARCH_DIR(Dir+'\'+SEARCH.Name, Filter, List); RES := findnext(SEARCH); end; finally findclose(SEARCH); end; end; gsh |
Re: [D2005] FindFirst/FindNext BUG
Ich bin selber verwirrt, aber ich hab schon alle Platten per ScanDisk überprüft.
Nur bei "G" funktioniert es. |
Re: [D2005] FindFirst/FindNext BUG
@Nightshade: Hast du deinen Code auch mal unter Delphi 7 getestet? Ist es dort genauso?
|
Re: [D2005] FindFirst/FindNext BUG
Zitat:
Nein unter D7 geht es auch nicht.... Aber woher kommt dieses Atrr = 8208 ? |
Re: [D2005] FindFirst/FindNext BUG
Zitat:
mit
Code:
kommst du sicherlich auch auf Laufwerk G: ;)
ChDir('G:\')
|
Re: [D2005] FindFirst/FindNext BUG
Das Problem ist folgendes:
Delphi-Quellcode:
Richtig muss es heissen:
if (fsr.Attr and faDirectory) = fsr.Attr then
Delphi-Quellcode:
Seit wann muss man ein ChDir machen, um Dateien auf einem anderen Laufwerk zu suchen?
if (fsr.Attr and faDirectory) = faDirectory then
Und deine Variante mit zwei Schleifen ist auch nicht gerade performant. Das kannst du doch alles in einer machen. |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Delphi 2005 - Bugreports" nach "Windows API" verschoben.
Kein Bug in Delphi, sondern beim Programmierer :mrgreen: |
Re: [D2005] FindFirst/FindNext BUG
@jim_raynor: Ich habe eigentlich in Erinnerung das das genau so wie bei FindFirstFile() ist...
Ja da bin ich mir sogar fast Sicher :)... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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