Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Festplatte durchsuchen lassen??? (https://www.delphipraxis.net/42735-festplatte-durchsuchen-lassen.html)

Bernd29bln 23. Mär 2005 09:15


Festplatte durchsuchen lassen???
 
Hi Leutz, :-D

Wie kann ich es machen das mein programm die festplatte nach audio dateien sucht und diese in eine listbox anzeigt oder speichert?

Gruss Bernd, :coder2:

Sprint 23. Mär 2005 09:18

Re: Festplatte durchsuchen lassen???
 
FindFirst, FindNext, FindClose.

shmia 23. Mär 2005 09:19

Re: Festplatte durchsuchen lassen???
 
http://www.delphipraxis.net/internal...ect.php?t=2464

Bernd29bln 23. Mär 2005 09:25

Re: Festplatte durchsuchen lassen???
 
hallo,

danke für eure schnelle antwort ich hätte da noch ne frage wie rufe ich die procedure auf ?

gruss bernd

alcaeus 23. Mär 2005 09:36

Re: Festplatte durchsuchen lassen???
 
Zitat:

Zitat von Bernd29bln
danke für eure schnelle antwort ich hätte da noch ne frage wie rufe ich die procedure auf ?

Pass auf, sonst geht dir die Katze noch an den Hals ;)
Sakura hat im ersten Posting genau beschrieben, wie die Funktion aufzurufen ist. Ich weiß nicht wo das Problem liegt :gruebel:

Greetz
alcaeus

Bernd29bln 23. Mär 2005 09:50

Re: Festplatte durchsuchen lassen???
 
hallo

ich habe eine listbox in der die dateien angezeigt werden sollen die auf der hd gefunden wurden wen ich die procedure die mir shmia vorgeschlagen hat so übernehme wie sie dort steht passiert logischer weise garnix also hab ich da was vergessen oder die falsche kompo weis ich nicht hab mich mit sowas nie befasst.

gruss bernd

alcaeus 23. Mär 2005 09:53

Re: Festplatte durchsuchen lassen???
 
Nimm den zweiten Code und gib als ersten Parameter
Delphi-Quellcode:
ListBox1.Items
an, das sollte funktionieren.

Greetz
alcaeus

Jarmen_Kell 23. Mär 2005 09:54

Re: Festplatte durchsuchen lassen???
 
Delphi-Quellcode:
          Form1.Memo1.Lines.Add(RootFolder + SR.Name); // <---- Das
        end;
      until FindNext(SR) <> 0;

durch deine Listbox oder was auch immer ersetzen

Bernd29bln 23. Mär 2005 10:00

Re: Festplatte durchsuchen lassen???
 
hallo alcaeus, :hi:

soll ich es hier einfügen:

Delphi-Quellcode:
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
gruss aus berlin :gruebel:

MathiasSimmack 23. Mär 2005 10:02

Re: Festplatte durchsuchen lassen???
 
Nein, du solltest den Begriff "Memo1" im Beispielcode durch den Namen deiner ListBox (oder was auch immer ersetzen). :roll: Steht doch da ...

Bernd29bln 23. Mär 2005 10:08

Re: Festplatte durchsuchen lassen???
 
hab ich gemacht aber die listbox bleibt leer. :roll:

Delphi-Quellcode:

procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
  '*.*'; Recurse: Boolean = True);

var
  SR: TSearchRec;
begin
  IncludeTrailingPathDelimiter(RootFolder);

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory = faDirectory then
            // --> ein Verzeichnis wurde gefunden
            //   der Verzeichnisname steht in SR.Name
            //   der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
            //       RootFolder + SR.Name
          if (SR.Name <> '.') and (SR.Name <> '..') then
            FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse);
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
  try
    repeat
      if SR.Attr and faDirectory <> faDirectory then
      begin
          // --> eine Datei wurde gefunden
          //   der Dateiname steht in SR.Name
          //   der vollständige Dateiname (inkl. Pfadangabe) ist
          //       RootFolder + SR.Name
        Form1.ListBox1.Items.Add(RootFolder + SR.Name);
      end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
:wall:

alcaeus 23. Mär 2005 10:09

Re: Festplatte durchsuchen lassen???
 
Ich zitiere mal die Mieze:
Zitat:

Das ganze noch mal ohne das hardgecodete Memo in der Prozedur und somit besser allgemein verwendbarer
Einfach ein bisschen runterscrollen im ersten Beitrag, dann kommt der allgemeine Code, dem man ein TStrings-Objekt übergeben kann.

Greetz
alcaeus

Bernd29bln 23. Mär 2005 10:14

Re: Festplatte durchsuchen lassen???
 
hi,

na den code hab ich doch da steht doch schon form1.listbox1.items.add
gucks du

Delphi-Quellcode:

procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
  '*.*'; Recurse: Boolean = True);

var
  SR: TSearchRec;
begin
  IncludeTrailingPathDelimiter(RootFolder);

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory = faDirectory then
            // --> ein Verzeichnis wurde gefunden
            //   der Verzeichnisname steht in SR.Name
            //   der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
            //       RootFolder + SR.Name
          if (SR.Name <> '.') and (SR.Name <> '..') then
            FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse);
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
  try
    repeat
      if SR.Attr and faDirectory <> faDirectory then
      begin
          // --> eine Datei wurde gefunden
          //   der Dateiname steht in SR.Name
          //   der vollständige Dateiname (inkl. Pfadangabe) ist
          //       RootFolder + SR.Name
        Form1.ListBox1.Items.Add(RootFolder + SR.Name);
      end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;

mirage228 23. Mär 2005 10:17

Re: Festplatte durchsuchen lassen???
 
Scroll im oben verlinken Thread mal runter. Da findest Du den (meinen) Code, den alcaeus gemeint hat, auch.

Guckst Du:
Delphi-Quellcode:
procedure FileList(const APath, AExt: string; ARecurse: Boolean;
  AList: TStrings);
var
  F   : TSearchRec;
  Path : string;
begin
  Path := IncludeTrailingPathDelimiter(APath); // nur für Delphi 4 und höher! 
  if (ARecurse) and
    (FindFirst(Path + '*.*', faAnyFile, F) = 0) then
  try
    repeat
      if (F.Name <> '.') and (F.Name <> '..') and
        ((F.Attr and faDirectory) = faDirectory) then
        FileList(Path + F.Name, AExt, ARecurse, AList);
    until FindNext(F) <> 0;
  finally
    FindClose(F);
  end;
  if FindFirst(Path + AExt, faAnyFile, F) = 0 then
  try
    repeat
      if (F.Name <> '.') and (F.Name <> '..') and
        ((F.Attr and faDirectory) <> faDirectory) then
        AList.Add(Path + F.Name);
    until FindNext(F) <> 0;
  finally
    FindClose(F);
  end;
mfG
mirage228

alcaeus 23. Mär 2005 10:17

Re: Festplatte durchsuchen lassen???
 
Zitat:

Zitat von Bernd29bln
Delphi-Quellcode:
Form1.ListBox1.Items.Add(RootFolder + SR.Name);

Ändere das wieder zurück in
Delphi-Quellcode:
FileList.Add(RootFolder + SR.Name);
und rufe die Funktion so auf:

Delphi-Quellcode:
procedure FindAllFiles(Form1.ListBox1.Items, <DeinPfad>, <DeineMask);
Das sollte dann klappen. Den zweiten Source musst du eben nicht anpassen, da er ja allgemein ist. Du musst einfach nur übergeben, wohin er die Strings kopieren soll.

Greetz
alcaeus

Bernd29bln 23. Mär 2005 10:24

Re: Festplatte durchsuchen lassen???
 
:hi: ich glaub ich lass es lieber ich bekomme es nicht auf die reihe dank euch trozdem.

gruss

Bernd29bln 23. Mär 2005 10:31

Re: Festplatte durchsuchen lassen???
 
die listbox bleibt troz allem leer kann nicht mal jemand die procedure posten für ne listbox.

für ganz doofe :wall:

Matze 23. Mär 2005 11:02

Re: Festplatte durchsuchen lassen???
 
Erst willst du aufgeben, 7 Minuten später doch nicht mehr.

Pushen ist auch innerhalb von 24 Stunden nicht gestattet.

Mach es so, das geht 100%
Delphi-Quellcode:
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var
  SR: TSearchRec;
begin
  RootFolder := IncludeTrailingPathDelimiter(RootFolder);

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory = faDirectory then
            if (SR.Name <> '.') and (SR.Name <> '..') then
              FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
  if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory <> faDirectory then
        begin
          Form1.ListBox1.Items.Add(RootFolder + SR.Name);
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  FindAllFiles('f:\mp3s\', '*.mp3', true);
end;
Um mehrere Dateiendungen zu durchsuchen kannst du das ja hintereinander aufrufen.

Bernd29bln 23. Mär 2005 11:11

Re: Festplatte durchsuchen lassen???
 
hi Martze ,

danke dir muss ich noch was beachten wen ich den code einfüge ?

gruss bernd, :spin2:

Matze 23. Mär 2005 11:17

Re: Festplatte durchsuchen lassen???
 
Zitat:

Zitat von Bernd29bln
Martze

:shock: :mrgreen:

Zitat:

Zitat von Bernd29bln
danke dir muss ich noch was beachten wen ich den code einfüge ?

Ein Delphi-Tutorial wäre nicht schlecht für dich, das sind die Grundlagen.

Nein, du musst nichts beachten, alles in den implementation-Abschnitt. Eine ListBox auf's Formular.

Und aufrufen muss du das natürlich nicht über einen Button, war nur ein Beispiel.

Bernd29bln 23. Mär 2005 11:21

Re: Festplatte durchsuchen lassen???
 
HI Matze,

habs mal ausprobiert listbox bleibt leer hier mal der code.

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var
  SR: TSearchRec;
begin
  RootFolder := IncludeTrailingPathDelimiter(RootFolder);

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory = faDirectory then
            if (SR.Name <> '.') and (SR.Name <> '..') then
              FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
  if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory <> faDirectory then
        begin
          Form1.ListBox1.Items.Add(RootFolder + SR.Name);
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 FindAllFiles('c:\mp3s\', '*.mp3', true);
end;

end.
gruss bernd

mirage228 23. Mär 2005 11:21

Re: Festplatte durchsuchen lassen???
 
Hi,

heißt Dein Verzeichnis auch wirklich "C:\mp3s" ?

mfG
mirage228

Bernd29bln 23. Mär 2005 11:23

Re: Festplatte durchsuchen lassen???
 
ups :oops: tutmirleid hab net aufgepasst

Bernd29bln 23. Mär 2005 11:34

Re: Festplatte durchsuchen lassen???
 
habs mal probiert der compi reagiert darauf und sucht aber am ende bleibt die listbox leer.

gruss bernd

Matze 23. Mär 2005 11:47

Re: Festplatte durchsuchen lassen???
 
Der Code geht 100%, habe ihn selbst getestet. Hast du in dem Verzeichnis überhaupt MP3-Dateien drin?

Du kannst ja mal, nach

Delphi-Quellcode:
Form1.ListBox1.Items.Add(RootFolder + SR.Name);
das hier testweise aufrufen, damit es gleich aktualisiert wird:

Delphi-Quellcode:
Application.ProcessMessages;

Bernd29bln 23. Mär 2005 11:50

Re: Festplatte durchsuchen lassen???
 
na ich hab c:\ eingeben um auf der gesamten hd zu suchen hat auch lange gedauert das er nach mp3 suchen soll hab ich auch drin gelassen.

gruss bernd

Bernd29bln 23. Mär 2005 12:03

Re: Festplatte durchsuchen lassen???
 
Supi Matze ,

mit [/delphi]Application.ProcessMessages;[delphi] Klapt es vielen dank .

war ja wieder ne schwere geburt :balloon:

gruss

Matze 23. Mär 2005 12:06

Re: Festplatte durchsuchen lassen???
 
Zitat:

Zitat von Bernd29bln
Supi Matze ,

mit
Delphi-Quellcode:
Application.ProcessMessages;
Klapt es vielen dank .

Du kannst Beiträge auch editieren. ;)

Dann hat es davor auch geklappt, nur hast du das nicht gesehen. Wenn die Festplatte zuende zurchsucht worden wäre, hätte sich die ListBox aktualisiert und die Liste wäre da.

So dauert es nun etwas länger, bis alles gefunden wurde.

Bernd29bln 23. Mär 2005 12:09

Re: Festplatte durchsuchen lassen???
 
ja genau konnte mal wieder bei mir nicht schnell genug gehen GROSSEN Dank an allen die mir geholfen haben. :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 Uhr.

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