AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi FindFirstFile: Wie suche ich auch in Unterordnern?
Thema durchsuchen
Ansicht
Themen-Optionen

FindFirstFile: Wie suche ich auch in Unterordnern?

Ein Thema von Pseudemys Nelsoni · begonnen am 3. Feb 2005 · letzter Beitrag vom 9. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 05:36
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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 05:39
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 06:04
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.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 06:24
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 ) - im Prinzip ist beides das selbe.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 06:27
hallo mirage,

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

Zitat:
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#6

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 06:54
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
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 08:44
hallo karmi,

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

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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
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
MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 10:05
Zitat von Pseudemys Nelsoni:
die shellapi wollte ich eigentlich weglassen
Warum eigentlich? Die ShellAPI vergrößert dein Programm nicht bzw. unwesentlich.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: FindFirstFile: Wie suche ich auch in Unterordnern?

  Alt 3. Feb 2005, 10:13
Moin!

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
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