Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem beim auflisten von dateien in verzeichnissen (https://www.delphipraxis.net/24892-problem-beim-auflisten-von-dateien-verzeichnissen.html)

dopeline 28. Jun 2004 10:05


Problem beim auflisten von dateien in verzeichnissen
 
Hallo!

Ich benutze folgenden Code:

-----Alle Dateien in einem Verzeichnis und dessen Unterverzeichnisse suchen-----
Delphi-Quellcode:
procedure GetAllFiles(mask: string);
var Search: TSearchrec;
  verz: string;
  such: string;

begin
  such := ExtractFileName(mask);
  verz := ExtractFilepath(mask);
  if verz[length(verz)] <> '\' then verz := verz + '\';
{ alle Dateien suchen }
  if FindFirst(mask, $23, Search) = 0 then
  repeat
      Form1.listbox1.items.add(verz + Search.Name);

  until FindNext(Search) <> 0;
  { Unterverzeichnisse durchsuchen }
  if FindFirst(verz + '*.*', fadirectory, Search) = 0 then
   begin;
    repeat
      if ((search.attr and fadirectory) = fadirectory) and (search.name[1] <> '.') then
        GetAllFiles(verz + Search.Name + '\' + such);
    until FindNext(Search) <> 0;

  end;
  Findclose(Search);
end;
-----Ein Fenster öffnen, in dem man ein Verzeichnis auswählen kann-----
Delphi-Quellcode:
function OpenFolder(root: Integer; Caption: string): string;
var
  bi: TBrowseInfo;
  lpBuffer: PChar;
  pidlPrograms, pidlBrowse: PItemIDList;
begin
  if (not SUCCEEDED(SHGetSpecialFolderLocation(GetActiveWindow, root,
    pidlPrograms))) then
    exit;
  lpBuffer := StrAlloc(MAX_PATH);
  bi.hwndOwner := GetActiveWindow;
  bi.pidlRoot := pidlPrograms;
  bi.pszDisplayName := lpBuffer;
  bi.lpszTitle := PChar(Caption);
  bi.ulFlags := BIF_RETURNONLYFSDIRS;
  bi.lpfn := nil;
  bi.lParam := 0;

  pidlBrowse := SHBrowseForFolder(bi);
  if (pidlBrowse <> nil) then
    if SHGetPathFromIDList(pidlBrowse, lpBuffer) then
      Result := lpBuffer;
  StrDispose(lpBuffer);
end;
Beim Klick auf diesen Button alle gefundenen Dateien in eine CheckListBox einfügen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 GetAllFiles(OpenFolder(CSIDL_DRIVES,'Verzeichnisse auswählen')+'\*.mp3');
 SendMessage(ListBox1.Handle,LB_DIR,DDL_ARCHIVE or DDL_HIDDEN or DDL_READONLY or DDL_READWRITE or DDL_SYSTEM,lParam(PChar(pfad+'\*.*')));
end;
Nun habe ich folgendes Problem:
Nach dem Ausführen werden in der CheckListBox alle gefundenen Dateien angezeigt, allerdings ohne den pfad. Nur die Datei namen. Also aus 'D:\Eigene Dateien\Musik\Track01.mp3' wird 'Track01.mp3'.
Wie muss ich den Code ändern, damit der vollständige Pfad angezeigt wird? Vielleicht sollte ich dazusagen, dass ich die Codes aus diesem Forum habe, sie also nicht von mir geschrieben wurden. Ich vermute, das das Problem bei dem 'SendMessage' in Button1Click liegt.

Gruß, dopeline

NicNacMan 28. Jun 2004 10:21

Re: Problem beim auflisten von dateien in verzeichnissen
 
also bei mir funzts!
aber wieso einfach wenns auch kompliziert geht :?

Delphi-Quellcode:
uses
  FileCtrl;

{...}

procedure ScanDirectory(mask : String);
var
  search   : TSearchRec;
  verz, such: String;
begin
  such := ExtractFileName(mask);
  verz := ExtractFilePath(mask);
  if verz[length(verz)] <> '\' then
    verz := verz + '\';
  if (FindFirst(mask, faAnyFile, search) = 0) then
    repeat
      Form1.ListBox1.Items.Add(verz + search.Name);
    until (FindNext(search) <> 0);
  if (FindFirst(verz + '*.*',fadirectory,search) = 0) then
    begin
      repeat
        if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then
          ScanDirectory(verz + search.Name + '\' + such);
      until (FindNext(search) <> 0);
      FindClose(search);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  path: String;
begin
  if SelectDirectory('Ordner wählen', '', path) then
    ScanDirectory(path+'*.mp3');
end;

dopeline 28. Jun 2004 10:42

Re: Problem beim auflisten von dateien in verzeichnissen
 
Hi NicNacMan,

kannst du die SelectDirectory-Prozedur noch posten? ich bekomme trotzdem nur die dateienamen. vielleicht giegt es an meiner OpenFolder-Funktion...

Danke!


Gruß, dopeline

NicNacMan 28. Jun 2004 12:20

Re: Problem beim auflisten von dateien in verzeichnissen
 
hi,

komisch, ich hab deinen code 1:1 kopiert, und es funzt.

die selectdirectory procedur ist in der filectrl unit
die is doch bei D7 dabei, oder :gruebel:

cu nicnacman

dopeline 28. Jun 2004 12:32

Re: Problem beim auflisten von dateien in verzeichnissen
 
Das ist ja merkwürdig... Ich habe den Code genau, wie du es beschrieben hast! ich habe die ScanDirectory-Prozedur und im ButtonClick steht auch das selbe...

Bei mir wird nichts in die ListBox geladen...
Könnte das eventuell damit zusammenhängen, dass es sich bei der ListBox um eine CheckListBox handelt? der Name ist 'ListBox1'


Gruß, dopeline

Christian Seehase 28. Jun 2004 12:35

Re: Problem beim auflisten von dateien in verzeichnissen
 
Moin Zusammen,

nur weil's mir gerade auffällt:

Diese Abfrage

Delphi-Quellcode:
... and (search.name[1] <> '.') ...
ist falsch.

Es muss explizit

Delphi-Quellcode:
... and (search.name <> '.') and (search.name <> '..') ...
abgefragt werden, da Datei-/Verzeichnisnamen durchaus mit einem führenden Punkt beginnen können.

Christian Seehase 28. Jun 2004 12:39

Re: Problem beim auflisten von dateien in verzeichnissen
 
Moin Dopeline,

Zitat:

Zitat von Dopeline
Wie muss ich den Code ändern, damit der vollständige Pfad angezeigt wird?

lass mal Deine Sendmessage Zeile weg.

dopeline 28. Jun 2004 12:49

Re: Problem beim auflisten von dateien in verzeichnissen
 
Das ist ja verrückt!
Ich habe die SendMessage-Zeile weggelassen. Wenn ich direkt Laufwerk D zum Durchsuchen auswähle, listet er alle MP3s auf. Wenn ich aber einen Unterordner zum Durchsuchen angebe, passiert gar nichts!

Also nur C:\ oder D:\ aber nicht C:\Musik\


Ist das eine Windows-Macke? Oder woran liegt das?


Gruß, dopeline

Christian Seehase 28. Jun 2004 12:54

Re: Problem beim auflisten von dateien in verzeichnissen
 
Moin dopeline,

ersetz jetzt noch einmal im zweiten FindFirst das faDirectory durch faAnyfile.

dopeline 28. Jun 2004 13:12

Re: Problem beim auflisten von dateien in verzeichnissen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm... Da passiert immer noch nichts...

Ich habe mal das Projekt zusammen mit einer Komponente in den Anhang gesteckt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.
Seite 1 von 2  1 2      

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