Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FindAllFiles - nur den Pfad als Result (https://www.delphipraxis.net/121627-findallfiles-nur-den-pfad-als-result.html)

Ajin 1. Okt 2008 14:05


FindAllFiles - nur den Pfad als Result
 
Grüss euch !

Ich habe mir mal Luckies tolles FindAllFIles mit Progress angeschaut.

Delphi-Quellcode:
Listbox1.Items.Add(ExtractFilename(PChar(Msg.LParam)));
Bedeutet ich lasse mir einen gefundenen Eintrag in die Lustbox schreiben. In diesem Fall nur der Filename.

Delphi-Quellcode:
Listbox1.Items.Add(PChar(Msg.LParam));
Diese Variante liefert mir den ganzen Pfad + Dateiname. Ich möchte den Dateinamen weglassen.
Mit dem guten alten GetFilesInDirectory war das überhaupt kein Problem.
Bevor ich jetzt den String auf Backslashes durchsuche, zerpflücke und und... möchte ich das Problem gleich bei der Wurzel Packen.

Delphi-Quellcode:
procedure TFindFiles.Find(Handle: THandle; RootFolder: string; Mask: string; Recurse: Boolean = True);
var
  hFindFile             : THandle;
  wfd                   : TWin32FindData;
begin
  if FFTerminate then
    Exit;
  Inc(FLevel);
  if RootFolder[length(RootFolder)] <> '\' then
    RootFolder := RootFolder + '\';
  ZeroMemory(@wfd, sizeof(wfd));
  wfd.dwFileAttributes := FILE_ATTRIBUTE_NORMAL;
  if Recurse then
  begin
    hFindFile := FindFirstFile(pointer(RootFolder + '*.*'), wfd);
    if hFindFile <> 0 then
    try
      repeat
        if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then
        begin
          if (string(wfd.cFileName) <> '.') and (string(wfd.cFileName) <> '..') then
          begin
            SendMessage(Handle, FFM_ONDIRFOUND, FLevel, lParam(string(RootFolder + wfd.cFileName)));
            Find(Handle, RootFolder + [b]wfd.cFileName[/b], Mask, Recurse);
          end;
        end;
      until FindNextFile(hFindFile, wfd) = False;
      Inc(FiFolder);
      SendMessage(Handle, FFM_PROGRESS, FiFolder, 0);
    finally
      Windows.FindClose(hFindFile);
    end;
  end;
  hFindFile := FindFirstFile(pointer(RootFolder + Mask), wfd);
  if hFindFile <> INVALID_HANDLE_VALUE then
  try
    repeat
      if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY) then
      begin
        SendMessage(Handle, FFM_ONFILEFOUND, 0, lParam(string(RootFolder + [b]wfd.cFileName[/b])));
      end;
    until FindNextFile(hFindFile, wfd) = False;
  finally
    Windows.FindClose(hFindFile);
  end;
  Dec(FLevel);
end;
Beim debuggen stand in RootFolder genau mein Pfad und in wfd.cFileName der Dateiname. Wenn ich wfd.cFileName entferne bekomme ich trotzdem jedes mal den Pfad+Dateinamen angezeigt. Wo genau muss ich den Rotstift ansetzen damit nur der Pfad als Result ohne den Dateinamen zurück kommt?

Grüsse aus NRW!

itashadow 1. Okt 2008 14:11

Re: FindAllFiles - nur den Pfad als Result
 
wenn ich dich jetzt richtig verstehe dürfte dir eventuell ExtractFilePath(); helfen :)

wenn nicht dann vergiss das :mrgreen:

DeddyH 1. Okt 2008 14:13

Re: FindAllFiles - nur den Pfad als Result
 
Was ist eine Lustbox? Schweinkram? :mrgreen:

smallsmoker 1. Okt 2008 14:16

Re: FindAllFiles - nur den Pfad als Result
 
Zitat:

Zitat von DeddyH
Was ist eine Lustbox? Schweinkram? :mrgreen:

:lol: :lol: :lol:

lustbox

Ajin 1. Okt 2008 14:20

Re: FindAllFiles - nur den Pfad als Result
 
Natürlich geht ExtractFilePath :wall:

[Oftopic]
Eine Lustbox... hmm

- eine Spielkonsole?
- (schlechte) deutsche Übersetzung für Joystick?

:mrgreen:
[/offtopic]

nahpets 1. Okt 2008 14:26

Re: FindAllFiles - nur den Pfad als Result
 
Hallo,

verstehe das nicht ganz, reicht nicht hier
Delphi-Quellcode:
SendMessage(Handle, FFM_ONDIRFOUND, FLevel, lParam(string(RootFolder + wfd.cFileName)));
RootFolder wegzulassen?

Stephan


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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