Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FindFirst/FindNext BUG (https://www.delphipraxis.net/34971-findfirst-findnext-bug.html)

Nightshade 30. Nov 2004 21:49


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:
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;
Beim Debuggen der Funktion ist mir aufgefallen das FindFirst für fsr.Attr = 8208 zurückliefert.

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]

MathiasSimmack 30. Nov 2004 21:52

Re: [D2005] FindFirst/FindNext BUG
 
Zitat:

Zitat von Nightshade
Auf meiner "G"-Festplatte findet er alles einwandfrei, aber z.B. auf meiner "F"-Festplatte fidet er nichts.

Äh, dann ist es wohl kein Bug. ;) Oder willst du ernsthaft erzählen, dass "FindFirst" deine G-Platte problemlos durchsucht, aber bei F versagt? :gruebel:

gsh 30. Nov 2004 21:53

Re: [D2005] FindFirst/FindNext BUG
 
Keine Ahnung von einen Bug aber mit dem was ich mir gebastelt habe funktioniert jedes Laufwerk.
Code:
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;
Damit habe ich noch nie problemme gehapt.

gsh

Nightshade 30. Nov 2004 21:57

Re: [D2005] FindFirst/FindNext BUG
 
Ich bin selber verwirrt, aber ich hab schon alle Platten per ScanDisk überprüft.

Nur bei "G" funktioniert es.

Matze 30. Nov 2004 21:58

Re: [D2005] FindFirst/FindNext BUG
 
@Nightshade: Hast du deinen Code auch mal unter Delphi 7 getestet? Ist es dort genauso?

Nightshade 30. Nov 2004 22:04

Re: [D2005] FindFirst/FindNext BUG
 
Zitat:

Zitat von Matze
@Nightshade: Hast du deinen Code auch mal unter Delphi 7 getestet? Ist es dort genauso?

Hmmm, auf die Idee hätte ich auch selber kommen können :oops:

Nein unter D7 geht es auch nicht....

Aber woher kommt dieses Atrr = 8208 ?

md_mse 30. Nov 2004 22:14

Re: [D2005] FindFirst/FindNext BUG
 
Zitat:

Zitat von Nightshade
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:
procedure TForm1.ReadDir(path : string; sl : TStrings);
...
  if FindFirst(Path + '*.*', FFileAttrs, Fsr) = 0 then
...
end;
Beim Debuggen der Funktion ist mir aufgefallen das FindFirst für fsr.Attr = 8208 zurückliefert.

Kann das mal jemand überprüfen ?

PS :

Win XP-Pro SP2
Delphi 2005 [eng] Architect Trail

Du musst vorher auf das Laufwerk wechseln, du kannst das nicht per "FindFirst" bewerkstelligen...
mit
Code:
ChDir('G:\')
kommst du sicherlich auch auf Laufwerk G: ;)

jim_raynor 1. Dez 2004 05:59

Re: [D2005] FindFirst/FindNext BUG
 
Das Problem ist folgendes:

Delphi-Quellcode:
if (fsr.Attr and faDirectory) = fsr.Attr then
Richtig muss es heissen:

Delphi-Quellcode:
 if (fsr.Attr and faDirectory) = faDirectory then
Seit wann muss man ein ChDir machen, um Dateien auf einem anderen Laufwerk zu suchen?

Und deine Variante mit zwei Schleifen ist auch nicht gerade performant. Das kannst du doch alles in einer machen.

DP-Maintenance 1. Dez 2004 07:55

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Delphi 2005 - Bugreports" nach "Windows API" verschoben.
Kein Bug in Delphi, sondern beim Programmierer :mrgreen:

md_mse 1. Dez 2004 18:57

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 10:05 Uhr.
Seite 1 von 2  1 2      

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