Einzelnen Beitrag anzeigen

Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: Status von FindAllFiles (Suche beendet?)

  Alt 18. Jan 2008, 09:53
Ich muss hier doch noch mal eine Post aufmachen.

Mit der Rekursion und dem setzen des Bool'schen Parameters, das bekomme ich noch nicht so ganz hin.

Delphi-Quellcode:
procedure TForm_Main.TransferToDB(Sender : TObject);
begin
  FFinished := False;
  FindAllFiles(FOrdner, '*.' + FTyp, FRekursion);
end;

procedure TForm_Main.FindAllFiles(RootFolder: String; Mask: String = '*.*'; Recurse: Boolean = true);
var
  wfd : TWin32FindData;
  hFile : THandle;
begin
  while not FCancelled or not FFinished do
  begin
    FFinished := True;

    if (AnsiLastChar(RootFolder)^ <> '\') then
      RootFolder := RootFolder + '\';

    if Recurse then
    begin
      hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);

      if (hFile <> INVALID_HANDLE_VALUE) then
      begin
        FFinished := False;
        try
          repeat
            if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY) then
            if (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') then
              FindAllFiles(RootFolder + wfd.cFileName, Mask, Recurse);
          until FindNextFile(hFile, wfd) = False;
        finally
          FFinished := True;
          Windows.FindClose(hFile);
        end;
      end; (* of if *)
    end; (* of if *)

    hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);

    if (hFile <> INVALID_HANDLE_VALUE) then
    begin
      FFinished := False;
      try
        repeat
          if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY) then
          begin
            //Bearbeitung
            if (LowerCase(ExtractFileExt(wfd.cFileName)) = Copy(Mask, 2, Length(Mask) - 1)) then
              AddFileInfo(RootFolder + wfd.cFileName);

            Application.ProcessMessages;
          end; (* of if *)
        until FindNextFile(hFile, wfd) = False;
      finally
        FFinished := True;
        Windows.FindClose(hFile);
      end;
    end; (* of if *)
  end;
end;
Wenn eine Datei gefunden wurde, setze ich FFinished auf False, bei dem FindClose wieder auf True.

Nach Beginn setze ich FFinished auch auf True, für denn Fall, dass gar keine Datei gefunden wird.

Und vor dem Aufruf von FindAllFiles setze ich es auf False, damit die Schleife durchlaufen wird.


Allerdings liest der Code die Dateien immer von vorne ein, wenn ich einen Ordner durchsucht habe, könnt ihr mir da bitte nochmal helfen?


Vielen Dank und freundliche Grüße
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat