Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 09:37
das geht mit FindeFirstFile genauso, wie mit FindFirst aus der Code-Lib. Und das umzuschreiben sollte kein Problem sein. FindFirst, FindNext durch FindFirstFile und FindnextFile ersetzen, Parameter anpassen und die eben den Rückgabewert der API-Funktionen auswerten.

Ich habe es mal schnell umgeschrieben:
Delphi-Quellcode:
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
  '*.*'; Recurse: Boolean = True);
var
  wfd: TWin32FindData;
  hFile: THandle;
begin
  if AnsiLastChar(RootFolder)^ <> '\then
    RootFolder := RootFolder + '\';
  if Recurse then
  begin
    hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
    if hFile <> INVALID_HANDLE_VALUE then
    try
      repeat
        if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then
          if (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') then
            FindAllFiles(FileList, RootFolder + wfd.cFileName, Mask, Recurse);
      until FindNextFile(hFile, wfd) = False;
    finally
      windows.FindClose(hFile);
    end;
  end;
  hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
  if hFile <> INVALID_HANDLE_VALUE then
  try
    repeat
      if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY then
      begin
        FileList.Add(RootFolder + wfd.cFileName);
      end;
    until FindNextFile(hFile, wfd) = False;
  finally
    Windows.FindClose(hFile);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStrings;
begin
  sl := TStringList.Create;
  try
    FindAllFiles(sl, 'd:\', '*.*', True);
    ListBox1.Items := sl;
  finally
    sl.Free;
  end;
end;
Die TStrings wirst du mit einem dynamischen String Array los, aber das solltest du selber hinbekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat