Einzelnen Beitrag anzeigen

Ajin

Registriert seit: 23. Feb 2006
Ort: Mons
252 Beiträge
 
Delphi 2010 Professional
 
#1

FindAllFiles - nur den Pfad als Result

  Alt 1. Okt 2008, 14:05
Grüss euch !

Ich habe mir mal Luckies tolles FindAllFIles mit Progress angeschaut.

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

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!
  Mit Zitat antworten Zitat