So durchsuchen Sie eine Datei über alle Unterverzeichnisse in Delphi

7

Ich habe diesen Code in Delphi implementiert, er sucht nach der Datei oder nach dem angegebenen Namen, aber er durchsucht alle Unterverzeichnisse. Wie kann das gemacht werden?

Code:

%Vor%     
CyprUS 30.06.2011, 14:40
quelle

5 Antworten

9

Wenn Sie Threading nicht benötigen, ist der einfachste Weg das:

%Vor%     
Andreas Rejbrand 30.06.2011, 14:55
quelle
20

Mit Delphi XE und höher können Sie sich IOutils.pas ansehen:

%Vor%     
Uwe Raabe 30.06.2011 15:55
quelle
4

Der einfachste Weg ist:

%Vor%

DSiWin32 ist eine kostenlose Delphi-Bibliothek.

    
gabr 30.06.2011 14:59
quelle
1

Wenn ich tricks wie überschriebene geschützte Methoden machen muss, tendiere ich dazu, eine generische Lösung für das Problem zu verwenden ... ich mache einen Hack für die Klasse.

So machen Sie das mit TDirectoryListbox .

Auf jedem Formular müssen Sie dieses hacked TDirectoryListbox verwenden, fügen Sie einfach unitTDirectoryListbox_WithHiddenAndSystemFolders zur Schnittstelle uses hinzu, auf diese Weise verwendet das Formular hacked TDirectoryListbox .

Erstellen Sie eine Datei namens unitTDirectoryListbox_WithHiddenAndSystemFolders.pas in Ihrem Projektordner.

Setzen Sie diesen Text in diese Datei (ich werde später erklären, was ich getan habe):

%Vor%

Jetzt erkläre ich, was ich getan habe:

  • Durch Hinzufügen von unitTDirectoryListbox_WithHiddenAndSystemFolders zur Schnittstelle uses mache ich das Formular, um die modifizierte (aka, hacked ) Komponente zu verwenden.
  • Ich habe damit begonnen, die geschützte Methode ReadDirectoryNames zu kopieren (die eine Modifikation benötigt), kopiere sie aus der Unit FileCtrl und bearbeite diese Kopie dann auf meiner eigenen Unit in fix das Problem (ohne Hidden Ordner, keine Systemordner); Die trick soll den Aufruf von FindFirst bearbeiten, indem ich nach faDirectory den Teil or faHidden or faSysFile hinzufüge, ich ändere auch SlashSep zu IncludeTrailingPathDelimiter (vermeide einige zusätzliche Referenzen, etc) und mache auch eine Neuformatierung (Indizierung) usw.) so kann ich sehen, dass diese Methode diejenige ist, die ich modifiziert habe.
  • Dann folge ich Dingen, die fehlen ... wie BuildList , die ich einfach einfach aus der Unit FileCtrl ohne irgendeine Änderung kopiere (wenn nicht kopiert, funktioniert hack nicht, seit dem Aufruf von ReadDirectoryNames ist innerhalb BuildList ).
  • Dann kopiere ich die Deklaration von FPreserveCase und FCaseSensitive und ihre Deklarationen (sie werden in BuildList Methode verwendet).
  • Das ist es, jetzt wird die modifizierte TDirectoryListBox versteckte und Systemordner sehen

Ich hoffe, dies hilft anderen, auf diese Weise können Sie sowohl TDirectoryListBox (Original und Modified) gleichzeitig (aber nicht in derselben Form, sorry) für Ihr Projekt haben, ohne VCL zu ändern.

PD: Jemand mit zusätzlichen Kenntnissen ist vielleicht in der Lage, Eigenschaften hinzuzufügen, die konfiguriert werden müssen, wenn er versteckte und / oder Systemordner als Verbesserung anzeigen muss. Es darf nicht sehr schwierig sein, zwei private boolesche Variablen und ihre entsprechenden property Deklaration mit Lese- und Schreibmethoden ... ich habe es nicht gemacht, da ich nicht nur solche zwei, auch SymLinks usw. hinzufügen möchte (suche nach faSymLink in der Einheit SysUtils und sehe wieviele es gibt, eine Menge davon arbeiten, um sie alle hinzuzufügen), Entschuldigung für die Unannehmlichkeiten dafür.

    
Anonymous 23.12.2015 15:03
quelle
0

Ich habe diese Lösung vor kurzem für eine andere Frage gepostet:

Delphi: Kopieren Sie Dateien aus dem Ordner mit Gesamtfortschritt. CopyFileEx?

    
Despatcher 30.06.2011 17:27
quelle

Tags und Links