AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit dem Suchen nach Dateien

Ein Thema von ByTheTime · begonnen am 11. Aug 2013 · letzter Beitrag vom 12. Aug 2013
Antwort Antwort
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#1

Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 19:22
Moin,
hier gibt es ein schönes Beispiel, wie man rekursiv nach Dateien suchen kann. Ich benutze diese Procedure in einer Abwandelung, den ich möchte nach mehreren Masken suchen und die Datein nur zähen, nicht auflisten (zumindestens nicht in einer ListBox oder ählichem, ich speichere die DateiInfo in einem Array). Deshalb habe ich erstmal etwas getestet. Der interessante Teil ist das hier:

Delphi-Quellcode:
  if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then // Mask := '*.mp3';
    try
      repeat
        { * Datei-Counter um "1" erhöhen * }
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
Die Procedure erfüllt (anscheinend) ihren Zweck und zählt, wenn ich das ganze durch meinen iTunes Ordner laufen lasse, 15325 MP3-Dateien.

Nun kommt die Modifizierte Funktion. Meine Idee war es, einfach alle Dateien (daher auch keine eindeutige Mask, sondern '*.*') und dann später die DateiEndung zu extrahieren und mit einer Liste zu vergleichen. Dazu wollte ich etwas testen und habe das ganze so umgeschrieben:

Delphi-Quellcode:
  if FindFirst(Directory + '*.*', faAnyFile and not faDirectory, SR) = 0 then
    try
      repeat
       if ExtractFileExt(SR.Name) = '.mp3then
       begin
         { * Datei-Counter um "1" erhöhen * }
       end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
Diese Funktion liefert auch etwas zurück, allerdings einen anderen Wert. Sie zählt "nur" 15312 Dateien. Also 13 Dateien weniger als die "Original Procedure". Ich konnte bis jetzt nicht herausfinden warum. Meine einzige Vermutung war, das vllt. ein Album (kommt mit 13 Dateien ja ziemlich gut hin) einen "Fehler" hat. Also das die Datei z.B. "01 Intro.txt.mp3" heißt und FindFirst die "Richtige Endung" findet, also *.mp3 und ExtractFileExt auf das *.txt kommt und daher diese Datei ausschließt. Allerdings ist das schon ziemlich weit hergeholt...

Ich hoffe ihr habt vllt. eine Idee

Grüße,
Lukas
Lukas
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 19:27
In jedem Unterpfad wird als Datei "." und ".." gefunden. Speichere doch mal alle gefundenen Dateien in einem Memo und da werden diese bestimmt mit auftauchen.
Da war jedenfalls bei mir das Problem.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 19:38
In jedem Unterpfad wird als Datei "." und ".." gefunden.
Das sind jetzt aber nur 2 Dateien, die zudem die zweite Prozedure finden müsste, aber nicht die erste. Es werden jedoch 13 zusätzliche Dateien gefunden.

Speichere das Ergebnis der ersten Variante in einer TStringList.

Anschließend setzt Du 'MyList.Sorted:=True'. Das beschleunigt das suchen im 2.Teil.

Im zweiten Teil entfernst Du alle Dateien, die Du gefunden hast, aus der Liste. Übrig bleiben dann die, die die ersten Version findet, die zweite jedoch nicht.

Delphi-Quellcode:
   if FindFirst(Directory + '*.*', faAnyFile and not faDirectory, SR) = 0 then
     try
       repeat
        if ExtractFileExt(SR.Name) = '.mp3then
        begin
          i := MyList.IndexOf(SR.Name);
          if (i>=0) then
             MyList.Delete(i)
          else
             FehlerMemo.Lines.Add(SR.name+' wird von der 2.Version gefunden, aber nicht von der 1.Version');
        end;
       until FindNext(SR) <> 0;
     finally
       FindClose(SR);
     end;

    FehlerMemo.Lines.Add('Folgende Dateien werden von der 2.Version nicht gefunden');
    FehlerMemo.Lines.AddStrings(MyList);
Auf diese Weise kannst Du dir die Frage dann selbst beantworten.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 19:51
Unterstützt XE2 noch nicht TDirectory.GetFiles mit einem FilterPredicate?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 20:29
Doch, siehe hier. Allerdings bietet mir die oben gezeigte Methode auch den direkten Zugriff auf die Dateigröße, was ebenfalss wichtig ist.
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 20:30
Haben die nicht gelisteten Dateien evtl. eine andere Endung wie MP3, mP3 oder Mp3? Ich glaube nämlich nicht, dass ExtractFileExt alles in Kleinschreibung wandelt, habe allerdings auch nicht nachgesehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 20:37
Doch, siehe hier. Allerdings bietet mir die oben gezeigte Methode auch den direkten Zugriff auf die Dateigröße, was ebenfalss wichtig ist.
Deshalb erwähnte ich ja das Filterpredicate:

TFilterPredicate = reference to function(const Path: string; const SearchRec : TSearchRec);
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#8

AW: Problem mit dem Suchen nach Dateien

  Alt 11. Aug 2013, 20:58
Das Problem hat sich ergeben. Dank diesen netten Funktionen mal beide Ergebnisse verglichen und mir die Unterschiede auflisten lassen. Es ist so simpel:

13 Datein tragen die Endung '.Mp3'.

if ExtractFileExt(SR.Name) = '.mp3then { ... } Ist '.mp3' = '.Mp3' ? Nein... Die if-Abfrage ist Case-Sensitive ARGHH!

@DaddyH: Hab deine Antwort garnicht gesehen, danke
Lukas

Geändert von ByTheTime (11. Aug 2013 um 21:39 Uhr)
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#9

AW: Problem mit dem Suchen nach Dateien

  Alt 12. Aug 2013, 10:38
Das Problem hat sich ergeben. Dank diesen netten Funktionen mal beide Ergebnisse verglichen und mir die Unterschiede auflisten lassen.
Nichts gegen diese Funktionen, nur mal so nebenbei: ich habe mich auf "SameText(...)" eingeschossen, weil's in ASM geschrieben ist und sehr schnell.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:02 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