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 FindFirstFile: Wie suche ich auch in Unterordnern? (https://www.delphipraxis.net/39462-findfirstfile-wie-suche-ich-auch-unterordnern.html)

Pseudemys Nelsoni 3. Feb 2005 05:36


FindFirstFile: Wie suche ich auch in Unterordnern?
 
siehe titel. Mit werden immer nur die dateien in dem hauptordner den ich der funktion übergebe angezeigt, nicht aber die dateien dessen unterordner. Wie mache ich das?

mirage228 3. Feb 2005 05:39

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Zitat:

Zitat von Pseudemys Nelsoni
siehe titel. Mit werden immer nur die dateien in dem hauptordner den ich der funktion übergebe angezeigt, nicht aber die dateien dessen unterordner. Wie mache ich das?

Hi,

da musst Du rekursiv alle Unterordner dursuchen.

Einen enstsprechenden Code findest Du in der Library. Du musst ihn nur geringfügig ändern (einfach ne Abfrage nach Deinem Dateinamen einbauen).

mfG
mirage228

Pseudemys Nelsoni 3. Feb 2005 06:04

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
moin Mirage,

ich muss noch erwähnen das ich nicht die VCL version FindFirst meine, sondern die API funktion FindFirstFile und einen code finde ich in der cod lib nicht. ich weiss derzeit nicht wie ich überhaupt an die ordner komme.

mirage228 3. Feb 2005 06:24

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Hi,

hier ist der Code:
http://www.delphipraxis.net/internal...ect.php?t=2464

Das nach nonVCL umzubauen sollte aber kein Problem darstellen (hoffe ich :mrgreen: ) - im Prinzip ist beides das selbe.

mfG
mirage228

Pseudemys Nelsoni 3. Feb 2005 06:27

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
hallo mirage,

leider hilft mir das nicht :oops: FindFirst hat da einen parameter den ich bei FindFirstFile nicht habe und zwar:

Zitat:

if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then

kalmi01 3. Feb 2005 06:54

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Hi,
so kann man es machen, läuft mit ShellAPI:
Delphi-Quellcode:
  interface
    procedure DirSearch(SearchDir,  SearchFile : string;
                        var DirList, FileList  : TStringList);


  implementation
    procedure DirSearch(SearchDir,  SearchFile : string;
                        var DirList, FileList  : TStringList);
      var
        i        : Integer;
        SearchRec : TSearchRec;
      begin
        if SearchDir[Length(SearchDir)] <> '\' then SearchDir := SearchDir + '\';
        i := FindFirst(SearchDir + SearchFile, faDirectory, SearchRec);

        if DirectoryExists(SearchDir)
        then DirList.Add(Copy(SearchDir, 0, Length(SearchDir) -1));

        while i = 0
        do begin
             if (SearchRec.Name <> '.')
                and
                (SearchRec.Name <> '..')
             then begin
                    if DirectoryExists(SearchDir + SearchRec.Name)
                    then DirList.Add(SearchDir + SearchRec.Name);

                    if FileExists(SearchDir + SearchRec.Name)
                    then FileList.Add(SearchDir + SearchRec.Name);

                    SearchRec.Name := SearchDir + SearchRec.Name;
                    DirSearch(SearchRec.Name, SearchFile, DirList, FileList);
                  end;

             i := FindNext(SearchRec);
           end;
        FindClose(SearchRec);
      end;
Der Parameter fa.... gibt den Filetyp an, also z.B. alle Files (faAnyFile) oder nur Dir's (faDirectory).

Ich hoffe geholfen zu haben.
Gruß Michael

Pseudemys Nelsoni 3. Feb 2005 08:44

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
hallo karmi,

die shellapi wollte ich eigentlich weglassen (hoffe du hast den code nicht extra geschrieben), sonst danke auf jeden fall :thumb:

Nur wie gesagt wollte ich die unit weglassen....ich dachte wie gesagt das FindFirstFile irgendwie auch unterverzeichnisse mit einbeziehen kann...aber scheint wohl nicht so.... gibt es denn sonst eine funktion um unterordner eines ordners in eine list zu bekommen oder so?
Ich möchte nämlich in einem verzeichnis(+ unterverzeichnisse) alle dateien anzeigen die die endung *.txt haben

Luckie 3. Feb 2005 09:37

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
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.

MathiasSimmack 3. Feb 2005 10:05

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Zitat:

Zitat von Pseudemys Nelsoni
die shellapi wollte ich eigentlich weglassen

Warum eigentlich? Die ShellAPI vergrößert dein Programm nicht bzw. unwesentlich. :)

Muetze1 3. Feb 2005 10:13

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Moin!

Zitat:

Zitat von Pseudemys Nelsoni
ich dachte wie gesagt das FindFirstFile irgendwie auch unterverzeichnisse mit einbeziehen kann...aber scheint wohl nicht so....

Einfach in dem Unterverzeichnis erneut suchen mit FindFirstFile() - es wurde doch nun schon mehrfach drauf hingewiesen das du es selber rekursiv machen musst. Vor allem: Warum sollte Windows eine solche Funktion anbieten?

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Seite 1 von 2  1 2      

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