Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mp3 files auch aus allen unterverzeichnissen einbeziehen (https://www.delphipraxis.net/33803-mp3-files-auch-aus-allen-unterverzeichnissen-einbeziehen.html)

100nF 12. Nov 2004 21:06


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...

tommie-lie 12. Nov 2004 21:22

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
Zitat:

Zitat von urbanbruhin
meine musik\buchstabe\interpret\track.mp3 -> meine musik\j\jeanette\enjoy.mp3

Wer so Musik hört, dem helfe ich nicht! :mrgreen:

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 hier gibt's den passenden Code dazu ;-)

glkgereon 12. Nov 2004 21:29

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
Zitat:

Zitat:

meine musik\buchstabe\interpret\track.mp3 -> meine musik\j\jeanette\enjoy.mp3
Wer so Musik hört, dem helfe ich nicht!
wer seine mp3s so sortiert......

noch ein tipp:

wenn du noch nicht gut bist (wie du selber schreibst) solltest du event. etwas langsamer an die sache rangehen....
Zitat:

das was ihr oben seht, ist praktisch alles aus dem internet!!
ist auch keine gute vorraussetzung...

statt diesem BrowseDialog könntest du erstmal mit dem JvSelectDirectory anfangen, aus Der Jvcl...

dann ist es übersichtlicher und einfacher

tommie-lie 12. Nov 2004 21:53

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
Zitat:

Zitat von glkgereon
wer seine mp3s so sortiert......

Stimmt, dem erst recht nicht :mrgreen:

MisterNiceGuy 12. Nov 2004 22:17

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 12. Nov 2004 22:27

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

100nF 13. Nov 2004 09:18

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 :!:

tommie-lie 13. Nov 2004 09:39

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
Zitat:

Zitat von urbanbruhin
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 :!:

Dein Ironiedetektor ist kaputt :mrgreen:

100nF 13. Nov 2004 09:43

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...

tommie-lie 13. Nov 2004 10:16

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
Doch, eigentlich schon. Was gibt er denn für 'ne Fehlermeldung aus?

100nF 13. Nov 2004 10:23

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...

tommie-lie 13. Nov 2004 10:27

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);

100nF 13. Nov 2004 10:33

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...??

tommie-lie 13. Nov 2004 11:05

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
:wall:
Ist ja auch wieder ein Property mit Zugriffsmethoden...
Also dann:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetFilesInDirectory('h:\', '*.mp3', Listbox1.Items, true);
end;
Wobei GetFilesInDirectory aus diesem Beitrag von Arakis stammt.
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.

100nF 13. Nov 2004 11:59

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?

tommie-lie 13. Nov 2004 12:09

Re: mp3 files auch aus allen unterverzeichnissen einbeziehen
 
Zitat:

Zitat von urbanbruhin
gibt es dafür eine erklärung? oder noch besser eine lösung?

Eigentlich nicht, auch wenn dein Weg sehr unorthodox ist.
Wie sieht denn player.OnButton3Click und OnButton2Click aus?

100nF 13. Nov 2004 12:18

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