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 FindFirst - faAnyFile, SearchRec (https://www.delphipraxis.net/81613-findfirst-faanyfile-searchrec.html)

capo 30. Nov 2006 12:08


FindFirst - faAnyFile, SearchRec
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
wenn ich hiermit ein Vezeichnis wähle um mir die Pfade der darin enthaltenen Dateien in eine Listbox zu schreiben:

Delphi-Quellcode:
if
FolderDialog1.Execute=True then begin
s:=FolderDialog1.Directory;

i := FindFirst(s+'\*.*', faAnyFile, SearchRec);
while i = 0 do
  begin
  ListBox1.Items.Add(s+'\'+SearchRec.Name);
..bekomme ich manchmal in der ersten beiden Zeilen der Listbox keine Dateipfade angezeigt... sondern nur das Verzeichnis
(schaut euch bitte das Bild an, wüßte nicht wie ich das sonst genauer beschreiben soll)

Wenn ich aber mit den dateien in der Listbox arbeiten will gibst einen Fehler, deshalb müßen falls vorhanden die ersten beiden
Dateilosen Zeilen raus,

Wie muss ich vorgehen?

gruss vom capo

Gruber_Hans_12345 30. Nov 2006 12:23

Re: FindFirst - faAnyFile, SearchRec
 
einfach die "Filenamen" ausblenden wenn die ein . oder .. sind
das ist das aktuelle bzw. das parent Verzeichnis (ist ganz normal das diese gefunden und angezeigt werden)

capo 30. Nov 2006 16:08

Re: FindFirst - faAnyFile, SearchRec
 
HI :)

wie blende ich den . und .. aus?

gruss capo

Gruber_Hans_12345 30. Nov 2006 16:17

Re: FindFirst - faAnyFile, SearchRec
 
Delphi-Quellcode:
if
FolderDialog1.Execute=True then begin
s:=FolderDialog1.Directory;

i := FindFirst(s+'\*.*', faAnyFile, SearchRec);
while i = 0 do
  begin
    if not ( (SearchRec.Name = '.') or (SearchRec.Name = '..') ) then
  ListBox1.Items.Add(s+'\'+SearchRec.Name);

Muetze1 30. Nov 2006 16:58

Re: FindFirst - faAnyFile, SearchRec
 
Sehr schön - und Dateien mit dem Namen werden denn gleich mit ausgeblendet. Durch NFS Clients etc ist nicht gleich gesagt, dass es bei allen unter Windows benutzten Dateisystemen dies nicht existieren kann...

Gruber_Hans_12345 30. Nov 2006 17:33

Re: FindFirst - faAnyFile, SearchRec
 
Zitat:

Zitat von Muetze1
Sehr schön - und Dateien mit dem Namen werden denn gleich mit ausgeblendet. Durch NFS Clients etc ist nicht gleich gesagt, dass es bei allen unter Windows benutzten Dateisystemen dies nicht existieren kann...

wie wäre es wenn du statt dem kommentar einfach ne lösung präsentieren würdest dafür?

TBx 30. Nov 2006 17:44

Re: FindFirst - faAnyFile, SearchRec
 
Möchtest DU die in dem Pfad enthaltenen Unterordner auch sehen?
Wenn nicht, dann ruf das FirndFirst mit
Code:
(faAnyFile and not FaDirectory)
auf.
Dann bekommst DU gar keine Ordner (weder übergeordnete noch untergeordnete) zu sehen.

Eine Anmerkung am Rande:

Du schreibst:
Delphi-Quellcode:
if FolderDialog1.Execute=True then
Du solltest hier nur
Delphi-Quellcode:
if FolderDialog1.Execute then
verwenden.

Warum das so ist, ist hier schon oft diskutiert worden und über die Forensuche leicht zu finden.

Gruß

Thomas

capo 30. Nov 2006 23:54

Re: FindFirst - faAnyFile, SearchRec
 
Delphi-Quellcode:
(faAnyFile and not FaDirectory)
Danke, genau das war's.

Zitat:

Du solltest hier nur
Delphi-Quellcode: markieren
if FolderDialog1.Execute then verwenden.

Warum das so ist, ist hier schon oft diskutiert worden und über die Forensuche leicht zu finden.
also ich hab nichts gefunden, hab zwar viel gefunden aber keine Erklärung.
Ich bezweifel nicht das es nichts gibt.
Magst du es trotzdem mal erklären?

gruss capo

Muetze1 1. Dez 2006 00:05

Re: FindFirst - faAnyFile, SearchRec
 
Der Unterschied liegt darin, dass True als konstante mit einem festen Wert definiert wurde. Wenn du nun einen Vergleich auf True in deiner IF Bedingung schreibst, dann wird das Ergebnis direkt auf diesen konstanten Wert durchgeführt. Das Problem hierbei liegt im Detail, denn ein boolscher Wert wird wie folgt zugeordnet:

0 => False
<> 0 => True

Somit ist alles ungleich 0 True, und das ist immer mehr als eine bestimmte Konstante beinhalten kann. Daher ist es hier von Vorteil einfach diesen direkten Vergleich weg zu lassen und nur das Execute aufzurufen ohne Vergleich. IF Bedingungen vergleichen das Ergebnis auf Gleichheit mit 0 und handeln entsprechend - und das sollte immer klappen, weil 0 festgelegt ist als FALSE, während True sich in vielen Formen äussern kann.

Zitat:

Zitat von Gruber_Hans_12345
Zitat:

Zitat von Muetze1
Sehr schön - und Dateien mit dem Namen werden denn gleich mit ausgeblendet. Durch NFS Clients etc ist nicht gleich gesagt, dass es bei allen unter Windows benutzten Dateisystemen dies nicht existieren kann...

wie wäre es wenn du statt dem kommentar einfach ne lösung präsentieren würdest dafür?

Wozu? Wenn man selber Dinge findet versteht man sie meist besser als alles vorgesetzt zu bekommen und zu kopieren. Bei solchen wirklich banalen Dingen mache ich dies auch nicht - bei umfangreicheren bzw. schweren Dingen ist posten von Code selbstverständlich. Ich will hier nicht den Souffleur spielen sondern den Leuten hier eher das Fischen beibringen...

capo 1. Dez 2006 12:46

Re: FindFirst - faAnyFile, SearchRec
 
Nun verstehe ich es, danke für die tolle Erklärung.
capo

Danke nochmal an alle :love:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 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