AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Probleme mit GetFilesInDirectory Procedure
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit GetFilesInDirectory Procedure

Ein Thema von Dash · begonnen am 10. Sep 2006 · letzter Beitrag vom 15. Feb 2025
Antwort Antwort
Dash
(Gast)

n/a Beiträge
 
#1

Re: Probleme mit GetFilesInDirectory Procedure

  Alt 10. Sep 2006, 19:47
Zitat von Go2EITS:
Ich glaube Dein False musst Du in True umbenennen, also so:
GetFilesInDirectory('C:\', '*.*', Listbox1.Items, True, True); Grüße Go2EITS
Stimmt, ich hatte es bei mir aber schon geändert

@Christian
Ich habe nun deinen letzten Code benutzt, allerdings hört er nach der ersten Datei auf zu scannen

Gruß
Dash
  Mit Zitat antworten Zitat
Migo

Registriert seit: 25. Sep 2005
Ort: Nordfriesland
17 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 14. Feb 2025, 17:01
Das Thema ist zwar schon einige Jahre alt... aber ich nutze die Rekursive Suche mit GetFilesInDirectory immer noch gerne:
Code:
procedure GetFilesInDirectory(Directory: string; const Mask: string; List: TStrings; WithSubDirs, ClearList: Boolean);

  procedure ScanDir(const Directory: string);
  var
    SR: TSearchRec;
  begin
    if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then try
      repeat
        List.Add(Directory + SR.Name)
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;

    if WithSubDirs then begin
      if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
        repeat
          if ((SR.attr and faDirectory) = faDirectory) and
             (SR.Name <> '.') and (SR.Name <> '..') then
            ScanDir(Directory + SR.Name + '\');
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
    end;
  end;

begin
  List.BeginUpdate;
  try
    if ClearList then List.Clear;
    if Directory = '\' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
Nun ist aber mein ungelöstes Problem, das ich bei der Suche in C:\ProgramData folgendes als Ergebnis bekomme, wenn ich nach "lights*" suche: Siehe angehängten Screenshot.

?!? Er dürfte mir die Dateien "Light Skin..." doch gar nicht anzeigen? Was mag der Grund sein?

Gruß,
Migo
Angehängte Grafiken
Dateityp: jpg Screenshot 2025-02-14 175357.jpg (38,1 KB, 34x aufgerufen)

Geändert von Migo (14. Feb 2025 um 17:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 14. Feb 2025, 17:53
Altes ANSI-Delphi? (D7 oder davor)
Und kein Kompatibilitätsmanifest vorhanden, bzw. läuft die Anwendung in einem Kompatibilitätsmodus? (WinXP oder so)


Hmmm, eigentlich sieht es nicht so aus,
aber würden die ShortNames verwendet, dann wäre es eine Erklärung.

Ohh ja, es werden ShortName und LongName vom FindFirst/FindNext berücksichtigt.

Verwende deinen Debugger und schau, was im SR alles drin steht, bzw. genauer in SR.FindData.cAlternateFileName




Ist Directory leer '' , dann raucht es dir ab
Delphi-Quellcode:
if Directory[Length(Directory)] <> '\then
      Directory := Directory + '\';
und, selbst wenn nicht, dann sollte if Directory = '\then Exit; bestimmt erst danach erfolgen.

Delphi-Referenz durchsuchenEndsStr, bzw. IncludeTrailingBackslash Delphi-Referenz durchsuchenIncludeTrailingPathDelimiter

Delphi-Referenz durchsuchenTDirectory.GetFiles
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Feb 2025 um 10:00 Uhr)
  Mit Zitat antworten Zitat
Migo

Registriert seit: 25. Sep 2005
Ort: Nordfriesland
17 Beiträge
 
Delphi 12 Athens
 
#4

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 15. Feb 2025, 09:26
Ohh ja, es werden ShortName und LongName vom FindFirst/FindNext berücksichtigt.
Danke Dir für Dein Feedback.
Ja, es werden beide wohl berücksichtigt - leider fehlt mir aktuell das Wissen, meine Prozedur so umzubauen, dass nur LongNames berücksichtigt werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 15. Feb 2025, 09:59
Den Namen nochmals mit Delphi-Referenz durchsuchenMatchesMask (System.Masks) prüfen.

Ob jetzt FindFirst oder via Delphi-Referenz durchsuchenTDirectrory.GetFiles, ist dabei auch egal.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.610 Beiträge
 
Delphi 7 Professional
 
#6

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 15. Feb 2025, 10:05
TSearchRec hat auch noch das Feld FindData. Da gibt es dann SearchRec.FindData.cFileName für den langen Dateinamen und SearchRec.FindData.cAlternateFileName für den kurzen Dateinamen.

Wenn Du nun nach lights* suchst, prüfst Du in cFileName, ob's auch mit lights beginnt. Light Skin fiele dann raus.

Wenn Du willst kannst Du die Prüfung dann auch noch casesensitiv machen, damit sich lights und Lights auch noch unterscheiden lassen.

Ansonsten: Reguläre Ausdrücke oder MatchesMask (wie schon vorgeschlagen).
  Mit Zitat antworten Zitat
Migo

Registriert seit: 25. Sep 2005
Ort: Nordfriesland
17 Beiträge
 
Delphi 12 Athens
 
#7

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 15. Feb 2025, 13:51
Ansonsten: Reguläre Ausdrücke oder MatchesMask (wie schon vorgeschlagen).
Ganz lieben Dank Euch beiden! Ihr habt mir sehr geholfen mit Eurer Hilfestellung.

Ich konnte mir mit
Code:
if MatchesMask(SR.Name, Suchmaske) then
nun weiterhelfen und bekomme jetzt die richtigen Ergebnisse angezeigt.


Interessanterweise konnte mir die Abfrage mit
Code:
if MatchesMask(SR.FindData.cFileName, Suchmaske) then
da nicht weiterhelfen. Sie zeigte nicht das gewünschte Ergebnis an.



Geändert von Migo (15. Feb 2025 um 13:54 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.610 Beiträge
 
Delphi 7 Professional
 
#8

AW: Probleme mit GetFilesInDirectory Procedure

  Alt 15. Feb 2025, 14:20
MatchesMask will als Parameter Strings. cFileName ist aber kein String.

Funktioniert eventuell
Delphi-Quellcode:
var
  myFileName: string;

...

  myFileName := string(SR.FindData.cFileName);
  if MatchesMask(myFileName, Suchmaske) then ...
oder
if MatchesMask(string(SR.FindData.cFileName), Suchmaske) then ...
  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 19:29 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