Delphi-PRAXiS
Seite 2 von 2     12   

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)

Luckie 3. Feb 2005 10:23

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Und jetzt das ganze noch ohne TStrings und somit ohne die Unit Classes.pas:
Delphi-Quellcode:
type
  TStringDynArray = array of string;

var
  FileCount: Cardinal = 0;
  Files  : TStringDynArray = nil;

function FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean
  = True): TStringDynArray;
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(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
        FileCount := length(Files)+1;
        Setlength(Files, FileCount);
        Files[FileCount - 1] := RootFolder + String(wfd.cFileName);
      end;
    until FindNextFile(hFile, wfd) = False;
  finally
    Windows.FindClose(hFile);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i           : Integer;
begin
  Files := nil;
  FindAllFiles('d:\Dokumente', '*.*', True);
  for i := 0 to length(Files) - 1 do
  begin
    Listbox1.Items.Add(Files[i]);
  end;
end;

Kernel32.DLL 3. Feb 2005 10:29

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Die Prozedur kommt ja wie gerufen...

Pseudemys Nelsoni 4. Feb 2005 12:58

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
perfekt luckie, danke :???:

EWeiss 9. Jan 2009 08:43

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

Zitat von Luckie
Und jetzt das ganze noch ohne TStrings und somit ohne die Unit Classes.pas:
Delphi-Quellcode:
type
  TStringDynArray = array of string;

var
  FileCount: Cardinal = 0;
  Files  : TStringDynArray = nil;

function FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean
  = True): TStringDynArray;
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(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
        FileCount := length(Files)+1;
        Setlength(Files, FileCount);
        Files[FileCount - 1] := RootFolder + String(wfd.cFileName);
      end;
    until FindNextFile(hFile, wfd) = False;
  finally
    Windows.FindClose(hFile);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i           : Integer;
begin
  Files := nil;
  FindAllFiles('d:\Dokumente', '*.*', True);
  for i := 0 to length(Files) - 1 do
  begin
    Listbox1.Items.Add(Files[i]);
  end;
end;

Kann es sein das hier was fehlt ?
Oder welchen sinn macht es das Extension (Mask) zu übergeben ?
Ich will schon alle Dateien addieren aber nur die welche dem Extension entsprechen..

Denke dann wäre es so richtig Oder ?
Delphi-Quellcode:
  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
        if ExtractFileExt(String(wfd.cFileName)) = Mask then
        begin
          FileCount := length(Files)+1;
          Setlength(Files, FileCount);
          Files[FileCount - 1] := RootFolder + String(wfd.cFileName);
        end;
      end;
    until FindNextFile(hFile, wfd) = False;
  finally
    Windows.FindClose(hFile);
  end;
gruss Emil

SirThornberry 9. Jan 2009 08:47

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Das ist so damit der Fragesteller auch noch etwas machen muss und nicht einfach nur copy & paste machen kann :)

EWeiss 9. Jan 2009 08:48

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

Zitat von SirThornberry
Das ist so damit der Fragesteller auch noch etwas machen muss und nicht einfach nur copy & paste machen kann :)

Hab nix copie & Paste
Siehe Berichtigung meinerseits.

Denke auch wenn man schon code bereitstellt dann sollte er auch funktionieren ;)
kann es sein das einige Leute hier immer unfreundlicher werden ?

gruss Emil

Luckie 9. Jan 2009 09:08

Re: FindFirstFile: Wie suche ich auch in Unterordnern?
 
Mein Code funktioniert immer - nur eben manchmal nicht so, wie er soll. :mrgreen:

EWeiss 9. Jan 2009 09:26

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

Zitat von Luckie
Mein Code funktioniert immer - nur eben manchmal nicht so, wie er soll. :mrgreen:

Nö ;)
Was macht es für einen sinn ein Extension innerhalb der Funktion zu übergeben wenn es nicht ausgewertet wird.
Ansonsten ja er funktioniert. :)

War auch nicht bös von mir gemeint .. hab mich halt nur gewundert.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.
Seite 2 von 2     12   

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