![]() |
Problem beim auflisten von dateien in verzeichnissen
Hallo!
Ich benutze folgenden Code: -----Alle Dateien in einem Verzeichnis und dessen Unterverzeichnisse suchen-----
Delphi-Quellcode:
-----Ein Fenster öffnen, in dem man ein Verzeichnis auswählen kann-----
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;
Delphi-Quellcode:
Beim Klick auf diesen Button alle gefundenen Dateien in eine CheckListBox einfügen.
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;
Delphi-Quellcode:
Nun habe ich folgendes Problem:
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; 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 |
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; |
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 |
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 |
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 |
Re: Problem beim auflisten von dateien in verzeichnissen
Moin Zusammen,
nur weil's mir gerade auffällt: Diese Abfrage
Delphi-Quellcode:
ist falsch.
... and (search.name[1] <> '.') ...
Es muss explizit
Delphi-Quellcode:
abgefragt werden, da Datei-/Verzeichnisnamen durchaus mit einem führenden Punkt beginnen können.
... and (search.name <> '.') and (search.name <> '..') ...
|
Re: Problem beim auflisten von dateien in verzeichnissen
Moin Dopeline,
Zitat:
|
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 |
Re: Problem beim auflisten von dateien in verzeichnissen
Moin dopeline,
ersetz jetzt noch einmal im zweiten FindFirst das faDirectory durch faAnyfile. |
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 23:37 Uhr. |
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