AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fortschrittsanzeige beim Durchsuchen der Festplatte
Thema durchsuchen
Ansicht
Themen-Optionen

Fortschrittsanzeige beim Durchsuchen der Festplatte

Ein Thema von newuser01 · begonnen am 1. Sep 2006 · letzter Beitrag vom 4. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#1

Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 11:39
Hallo ich bins mal wieder Ich habe diesmal folgendes Problem. Ich möchte wärend die Festplatte nach bestimmten mp3 Dateien durchsucht wird diesen Vorgang auch anzeigen lassen (Progressbar)den Code wie ich nach den Dateien suche habe ich siehe unten. Nun muss das ganze nur noch Zeitgleich mit der Progressbar zusammenarbeiten um den Fortschritt anzuzeigen. Dazu brauche ich ja den Max-Wert der Progressbar den könnte ich ja übergeben in dem ich die ganze Festplatte ersteinmal nach allen mp3 Dateien durchsuchen lasse und dieses dann in eine Stringlist schreibe um dann Count der Stringlist der Progressbar zu übergeben. Danach brauch ich ja dann nur noch über eine Schleife der Progressbar.Position i übergeben soweit meine Idee nur bekomm ich das nicht ganz hin

//hier der Code um bestimmte mp3 Dateien zu suchen

Delphi-Quellcode:

procedure GetFilesInDirectory(ADirectory: string; AMask: String; AList: TStrings; ARekursiv: Boolean);
var
  SR: TSearchRec;
begin
  if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then
    ADirectory:=ADirectory+'\';

  if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0) then begin
    repeat
      if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then
          AList.Add(ADirectory+SR.Name)
    until FindNext(SR)<>0;
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
    begin
      repeat
        if (SR.Name<>'.') and (SR.Name<>'..') then
          GetFilesInDirectory(ADirectory+SR.Name,AMask,AList,True);
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;

procedure TForm1.btnSearchClick(Sender: TObject);
begin

lbAusgabe.Clear;
GetFilesInDirectory(DriveComboBox1.Drive+':\','*'+eSearch.Text+'*.mp3',lbAusgabe.Items,True);


end;
Grüße
Holger
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 12:27
Dann müsstest du aber zweimal suchen ... ein Beipsiel zum Suchen von Dateien mit Progressbar findest du in der CodeLib.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 12:28
Das geht so nicht, denn woher willst du wissen wie viele datein du findest, um den maximalen Wert zu setzen?

Es geht nur mit einem kleinen Trick: http://www.michael-puff.de/Developer/Delphi/Sonstiges -> FindAllFilesProgress_Demo.zip
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 12:29
Also ich würd mir die Gesamtgröße der Festplatte/des ordners holen und den Fortschritt anhand des verhältnis' durchsuchter speicherplatz/vorhandener belegter speicherplatz berechnen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 12:41
Bei der gesamten Festplatte hat DGL-luke schon fast Recht.
Auch wenn die den belegten Speicher der Ordner, alternativen Datenströme, MFT, gesperrter Ordner u.s.w nicht mir einrechnen kannst.

"belegter Speicher", oder "Gesammtspeicher" - "freier Platz" = Proggresbar.Max

dann wärend dem Durchsuchen alle gefundenen Dateigrößen zusammenrechnen = Proggresbar.Position


Natürlich mstest du noch 'nen Divisor einbauen, da die Platte bestimmt größer als 2 GB ist


Oder mal so als Tipp: versuch dir mal zu überlegen wie ich das gelöst hab ... is garnicht sooo schwer und die Lösung urde weiter oben schon mehrmals fast so ähnlich vorgeschlagen
> http://www.delphipraxis.net/internal...117&highlight=

(kannst ja zum Test beidemal das Laufwerk "X:\" angeben ^^)




PS: die Größe eines Ordners kann man sich nicht holen
nur bei der gesamten Festplatte kann ganz schnell die anzahl der freien Cluster us dem Fesplattenbitmap ausgelesen und mit der Clustergröße multipliziert werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 12:43
Zitat von DGL-luke:
Also ich würd mir die Gesamtgröße der Festplatte/des ordners holen und den Fortschritt anhand des verhältnis' durchsuchter speicherplatz/vorhandener belegter speicherplatz berechnen.
Wenn man die gesamte Festplatte durchsucht, ist das kein Problemn, da gibt es eine API-Funktion, aber für einen Ordner musst du ja doch wieder erst alle Dateien durchgehen und deren Größe bestimmen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 12:48
Stimmt. Der Explorer rechnet da ja auch alles zusammen...

@himitsu: Entweder "Luke"/"Lukas"/"DGL-Luke" oder "Luckie", aber bitte nicht "Luck", sonst kommen wir hier leicht zu verwechslungen...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#8

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 13:33
Also ersteinmal Danke für die schnellen Antworten Ich habe mir mal das FindAllFilesProgress_Demo.zip angesehen bei diesem Beispiel wird ja die ganze Festplatte nach allen Dateien durchsucht mit Fortschritt. Meine Frage warum das ganze neu erfinden könnte man diese Funktion nich umbauen so das nicht alle Files aufgelistet werden sondern nur bestimmte die gesucht (DriveComboBox1.Drive+':\','*'+eSearch.Text +'*.mp3') werden ?

also nicht ThreadParams.Mask := '*.*';
sondern ThreadParams.Mask :=DriveComboBox1.Drive+':\','*'+eSearch.Text +'*.mp3'

Ich habe es schon so versucht erst wird die Platte durchsucht und alles in eine ListBox eingetragen mit dem Code aus dem Demo und danach übergebe ich Count dieser ListBox der Progressbar.Max und führe anschließend meinen Code aus und suche bestimmte dateien Das funktioniet ist aber nicht besonders schön da die Aktion (Suchen) nicht genau zeitgleich mit der Aktion (Fortschritt) ist


//Auszug aus dem Demo
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ThreadParams : PThreadParams;
begin
  RichEdit1.Clear;
  New(ThreadParams);
  try
    ThreadParams.Handle := Handle;
    ThreadParams.RootFolder := Edit1.Text;
    ThreadParams.Mask := '*.*';
    ThreadParams.Recurse := True;
    ThreadParams.Progress := True;
    WaitForThread(@ThreadFunc, ThreadParams);
  except
    on E: Exception do ShowMessage(E.Message);
  end;
end;

Grüße
Holger
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#9

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 13:43
Das Problem ist, wenn du nur suchst, dann bist du schneller du suchst gleich richtig und zählst erst garnicht nach.

Sowas lohnt sich im Grunde nur, wenn noch was Zeitaufwenigeres nebenher gemacht wird, also z.B. die Dateiinhalte auch noch mit eingelesen werden.

Denn dann ist das Zählen wesendlich schneller und zeigt auch irgendwann einen Erfolg.


Derzeit laß ich ja die kleinen Strich durchlaufen ... hatte vorher den Balken komplett, also akutell gefundene/verarbeitete Dateien im Verhältnis zu den bisher Gezählten. Ist auch 'ne Möglichkeit, da man schon wärend des Zählens einen kleinen "Erfolg" sieht.


Luckies FindAllFiles zählt z.B. erstmal alles und geht dann durch.
Vorteil: ist schneller, weil nicht 2 Leseprozesse die Platte gleichzeitig belasten.
Nachteil: der Code hängt am Anfang schonmal recht lange (der zählt ja erstmal und man sieht garnüschts)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#10

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 13:59
Ok eine Fortschrittanzeige wäre vielleicht nicht so von Vorteil wegen der Geschwindigkeit aber wäre in meinem Code zb: ein Label möglich was den Status anzeigt also in welchem Ordner gerade gesucht wird ?

Gruß
Holger
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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