![]() |
mp3 files auch aus allen unterverzeichnissen einbeziehen
halloo
ich arbeite im moment an einem mp3Player, und da soll man natürlich mp3 files zum archiv hinzufügen können, was ich auch kann, jedoch etwas unbequem. mit 'BrowseDialog' kann man den ordner wählen, aber es werden jeweils nur diejenigen dateien hinzugefügt, die sich direkt in diesem ordner befinden. meine ca. 22 GB musik befindet sich aber auch in unterordner: meine musik\buchstabe\interpret\track.mp3 -> meine musik\j\jeanette\enjoy.mp3 das ist ziemlich mühsam, alle tracks in mein archiv abzuspeichern... :pale: :?: meine frage: ist es möglich, einen ordner(meine musik) zu markieren, und es werden AUCH(nicht NUR!) alle untergeordneten files in einer listbox aufgelistet?? :?: ACHTUNG: ich muss auch zu jedem track den pfad haben!! hier mein code, der vielleicht nützlich ist:
Delphi-Quellcode:
procedure TAdd.hinzufuegenClick(Sender: TObject);
var mp3Folder : string; begin mp3Folder := BrowseDialog('Wähle einen Ordner mit mp3-Dateien', BIF_RETURNONLYFSDIRS); if mp3Folder = '' then Exit; statictext1.Caption := mp3Folder; FillMP3FileList(mp3Folder, listbox1.Items); //informationen aus mp3 files einlesen timer1.Enabled := true; //informationen in die datenbank eintragen end; BrowseDialog:
Delphi-Quellcode:
function BrowseDialog(const Title: string; const Flag: integer): string;
var lpItemID : PItemIDList; BrowseInfo : TBrowseInfo; DisplayName : array[0..MAX_PATH] of char; TempPath : array[0..MAX_PATH] of char; begin Result:=''; FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); with BrowseInfo do begin hwndOwner := Application.Handle; pszDisplayName := @DisplayName; lpszTitle := PChar(Title); ulFlags := Flag; lpfn := BrowseDialogCallBack; end; lpItemID := SHBrowseForFolder(BrowseInfo); if lpItemId <> nil then begin SHGetPathFromIDList(lpItemID, TempPath); Result := IncludeTrailingBackslash(TempPath); GlobalFreePtr(lpItemID); end; end; ACHTUNG: ich bin nicht sehr gut im programmieren, das was ihr oben seht, ist praktisch alles aus dem internet!! vielen dank schon im voraus... |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Zitat:
Was du brauchst ist ein rekursiver Dateisuche-Algorithmus. Wenn man also auf einen Ordner stößt, in diesen hinabsteigen und dort alle Dateien suchen. Sollte dieser Ordner wiederum Unterordner enthalten, wieder rein und dort alle Dateien suchen. Und ![]() |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Zitat:
noch ein tipp: wenn du noch nicht gut bist (wie du selber schreibst) solltest du event. etwas langsamer an die sache rangehen.... Zitat:
statt diesem BrowseDialog könntest du erstmal mit dem JvSelectDirectory anfangen, aus Der Jvcl... dann ist es übersichtlicher und einfacher |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Zitat:
|
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Hi wenn du wirklich noch nicht so viel Ahnung hast, versuch es doch einfach mal mit der FindFile Komponente. Die geistert hier in der DP rum und ist für dein Problem perfekt geeignet!
|
DP-Maintenance
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Falsche Sparte - CodeLibrary = Tippsammlung |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
erstens mal vielen dank, ich werde alles einmal ausprobieren...
und zweitens habe ich die festplatte von einem kollegen geliehen, darum kann ich nichts dafür dass es so geordnet ist und solche musik enthält :!: |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Zitat:
|
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
das mit dem findallfiles klingt sehr gut, finde ich doch wie gesagt, ich bin noch ein anfänger und darum habe ich ein problem damit... :oops:
kann man denn das nicht so aufrufen :?: :
Delphi-Quellcode:
procedure TAdd.Button6Click(Sender: TObject);
begin findallfiles(listbox1.items.strings, label2.Caption, '*.mp3', true); end; übrigens, ich habe delphi 7, falls das noch nützlich sein könnte... |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Doch, eigentlich schon. Was gibt er denn für 'ne Fehlermeldung aus?
|
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
er markiert die stelle nach dem ersten komma (listbox1.items.strings, :!: ...) und er schreibt: '[' erwartet, aber ',' gefunden
muss man da noch irgend einen itemindex angeben?? funktioniert aber auch nicht... |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Ohne "Strings" hinter den Items, denn Strings ist ein Property, daß eienn String anhand eines Index zurückliefert:
Delphi-Quellcode:
findallfiles(listbox1.items, label2.Caption, '*.mp3', true);
|
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
geht auch nicht...
er markiert wieder die gleiche stelle und der fehler heisst: 'Konstantenobjekt kann nicht als VAR-Parameter weitergegeben werden' aus diesem text werde ich nicht wirklich schlau, aber vielleicht könnte man ja die function etwas abändern, dass es das funktioniert...?? |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
:wall:
Ist ja auch wieder ein Property mit Zugriffsmethoden... Also dann:
Delphi-Quellcode:
Wobei GetFilesInDirectory aus
procedure TForm1.Button1Click(Sender: TObject);
begin GetFilesInDirectory('h:\', '*.mp3', Listbox1.Items, true); end; ![]() Luckies Funktion scheint wohl Probleme mit der Rekursion zu haben, jedenfalls hat bei meinen Tests ein rekursives Suchen keine Dateien in Unterverzeichnissen gefunden, die eindeutig vorhanden waren. Arakis' Funktion arbeitet fehlerfrei, zumindest meinen Tests zufolge, obiger Code ist getestet und läuft so wie er ist, die Listbox wird mit den Dateien gefüllt. |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
genau das ist es!!
erstmal vielen dank aber jetzt muss ich diese files noch in meine datenbank hineinschreiben können. das habe ich so gemacht:
Delphi-Quellcode:
begin
label8.Caption := '0'; listbox1.ItemIndex := 0; repeat listbox1.ItemIndex := listbox1.ItemIndex+1 ; label8.Caption := inttostr(strtoint(label8.caption)+1); player.Button3.Click; // files-informationen auslesen button2.Click; // in die datenbank einschreiben until listbox1.ItemIndex = listbox1.Count-1; label8.Caption := inttostr(strtoint(label8.caption)+1); player.Button3.Click; button2.Click; end; das problem ist jedoch, dass immer nur der letzte eintrag der listbox in die datenbank eingeschrieben wird gibt es dafür eine erklärung? oder noch besser eine lösung? |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
Zitat:
Wie sieht denn player.OnButton3Click und OnButton2Click aus? |
Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
ich habe jetzt gleich beide prozeduren in eine gepackt, das andere macht ja keinen sinn...
Delphi-Quellcode:
procedure Tplayer.Button3Click(Sender: TObject);
begin mp3file := add.ListBox1.Items.Strings[add.ListBox1.itemindex]; FillID3TagInformation(mp3file, add.edit1, add.edit2, add.edit3, add.edit4, add.edit5, add.edit6); table1.Insert; add.dbedit1.Text := add.edit1.Text; add.dbedit2.Text := add.edit2.Text; add.dbedit4.Text := add.edit4.Text; add.dbedit5.Text := add.edit5.Text; add.dbedit6.Text := add.edit6.Text; add.dbedit9.Text := add.edit13.text; mediaplayer1.Close; mediaplayer1.FileName := mp3file; mediaplayer1.Open; a := mediaplayer1.Length*(929/930092); b := Rounder(a, 0); label1.Caption := floattostr(b); add.DBEdit8.Text := timetostr(SecondsToTime(strtoint(label1.Caption))); add.dbedit3.Text := add.StaticText1.Caption; add.dbedit7.Text := mp3file; table1.Post; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 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