Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FindFirst FindNext - Datei muss achiviert werden? (https://www.delphipraxis.net/31321-findfirst-findnext-datei-muss-achiviert-werden.html)

greyblue 7. Okt 2004 10:42


FindFirst FindNext - Datei muss achiviert werden?
 
Hallo :)

ich benutzt FindFirst, FindNext um Dateien in einem Ordner auszulesen..
und das soll in einem LISTVIEW aufgelistet werden..

Delphi-Quellcode:
sr: TSearchRec;

  if FindFirst(applpath + 'daten\*.dat', faAnyFile, sr) = 0 then
  begin
    repeat
      if (sr.Attr and faAnyFile) = sr.Attr then
      begin
        dateiname := sr.Name;
        V1 := copy(dateiname,1,pos('_',dateiname)-1);
        delete(dateiname,1,pos('_',dateiname));
        V2 := copy(dateiname,1,pos('_',dateiname)-1);
        delete(dateiname,1,pos('_',dateiname));
        V3 := copy(dateiname,1,pos('.',dateiname)-1);
        .....
     
      end;
    until FindNext(sr) <> 0;

    FindClose(sr);
  end;
Das funktioniert auch super!

Aber,
wenn man bei der Eigenschaft der .dat Datei, "Datei kann achieviert werden" nicht ankreuzen, dann wird diese Datei nicht in der Listview angezeigt ..

warum ist es so?

Vielen Dank!!

Gruss, greyblue

sakura 7. Okt 2004 10:47

Re: FindFirst FindNext - Datei muss achiviert werden?
 
Was genau willst Du mit dieser Zeile erreichen?
Delphi-Quellcode:
if (sr.Attr and faAnyFile) = sr.Attr then
Wo im Code ist etwas von einer ListView zu sehen? Der Rest scheint korrekt, nur solange wir nicht die Ereignisse wissen, die bis zum ListView-Eintrag führen, lässt sich wenig sagen ;)

...:cat:...

greyblue 7. Okt 2004 10:58

Re: FindFirst FindNext - Datei muss achiviert werden?
 
Zitat:

Zitat von sakura
Was genau willst Du mit dieser Zeile erreichen?
Delphi-Quellcode:
if (sr.Attr and faAnyFile) = sr.Attr then
Wo im Code ist etwas von einer ListView zu sehen? Der Rest scheint korrekt, nur solange wir nicht die Ereignisse wissen, die bis zum ListView-Eintrag führen, lässt sich wenig sagen ;)

...:cat:...

diese Zeile habe ich irgendwo kopiert(vielleicht die Hilfe in Delphi) .. :P
soll es (sr.Attr and faAnyFile) = faAnyFile heissen?

Delphi-Quellcode:
 ListItem := ListView1.Items.Add;
        ListItem.ImageIndex := 0;
        ListItem.Caption := '  ' + V1;
        ListItem.SubItems.Add(V2);
        ListItem.SubItems.Add(V3);
        ListItem.SubItems.Add(DateToStr(FileDateToDateTime(sr.Time)));

das war die ...... oben .. :-)

Danke ..

greyblue

sakura 7. Okt 2004 11:01

Re: FindFirst FindNext - Datei muss achiviert werden?
 
Ändere
Delphi-Quellcode:
if (sr.Attr and faAnyFile) = sr.Attr then
mal auf
Delphi-Quellcode:
if (sr.Attr and faSymLink) = 0 then
Der Rest (die ... von oben) sieht eigentlich korrekt aus :-)

...:cat:...

greyblue 7. Okt 2004 11:10

Re: FindFirst FindNext - Datei muss achiviert werden?
 
danke,

aber komisch ist,

das Code oben funktioniert bis auf Achiev..

das Ankreuzen von versteckt oder schreibgeschützt in der Dateieigenschaft macht überhaupt nichts,
nur man muss vor Achiev ankreuzen ..

:(

if (sr.Attr and faAnyFile) = sr.Attr then

das bedeutet doch, dass nur die Dateien nicht die Unterordner gesucht werden oder?

alcaeus 7. Okt 2004 11:18

Re: FindFirst FindNext - Datei muss achiviert werden?
 
Hi greyblue,

hier mal die Konstanten wie sie in der Hilfe sind:
Code:
faReadOnly       1        Read-only files
faHidden         2        Hidden files
faSysFile        4        System files
faVolumeID       8        Volume ID files
faDirectory      16       Directory files
faArchive        32       Archive files
faSymLink        64       Symbolic link
faAnyFile        71       Any file
Von daher schätze ich mal, dass faAnyFile eigentlich faReadOnly or faHidden or faSysFile or faSymLink ist.
Deine Abfrage müsste also so lauten:
Delphi-Quellcode:
if (sr.Attr and (faAnyFile or faArchive)) = sr.Attr then
Greetz
alcaeus

greyblue 7. Okt 2004 11:22

Re: FindFirst FindNext - Datei muss achiviert werden?
 
Danke für deine Antwort,

werde mal probieren,

habe gedacht dass faArchive \in faAnyFile ist ..

Vielen Dank!!

himitsu 7. Okt 2004 11:27

Re: FindFirst FindNext - Datei muss achiviert werden?
 
[add]
ach, zu langsam -.-''
Zitat:

habe gedacht dass faArchive \in faAnyFile ist ..
Ja, es ist dort mit drin.
[/add]

Delphi-Quellcode:
if (sr.Attr and faAnyFile) = sr.Attr then
als wer der verbrochen hat, gehört gevierteilt, da diese Abfrage immer True ergibt

Delphi-Quellcode:
  faReadOnly = $01;
  faHidden   = $02;
  faSysFile  = $04;
  faVolumeID = $08;
  faDirectory = $10;
  faArchive  = $20;
  faSymLink  = $40;
  faAnyFile  = $3F; // also alle möglichen Bits sind gesetzt

Prüft, ob nur ein bestimmtes Bit (hier faArchive),
Delphi-Quellcode:
if sr.Attr and faArchive = sr.Attr then
oder mehrere bestimmte Bits (hier faArchive und faHidden) gesetzt sind und kein Anderes.
Delphi-Quellcode:
if sr.Attr and (faAnyFile or faHidden) = sr.Attr then

Prüft, ob ein bestimmtes Bit (hier faArchive),
Delphi-Quellcode:
if sr.Attr and faArchive <> 0 then
oder mehrere bestimmte Bits (hier faArchive und faHidden) gesetzt sind ... ob andere Bits auch gesetzt sind, oder nicht, ist hierbei egal.
Delphi-Quellcode:
if sr.Attr and (faAnyFile or faHidden) <> 0 then

sakura 7. Okt 2004 11:30

Re: FindFirst FindNext - Datei muss achiviert werden?
 
Zitat:

Zitat von alcaeus
hier mal die Konstanten wie sie in der Hilfe sind:
Code:
faReadOnly       1        Read-only files
faHidden         2        Hidden files
faSysFile        4        System files
faVolumeID       8        Volume ID files
faDirectory      16       Directory files
faArchive        32       Archive files
faSymLink        64       Symbolic link
faAnyFile        71       Any file

An der Stelle ist die Hilfe falsch :shock: Das leite ich mal weiter ;-)
Hier die Definitionen aus der SysUtils.pas
Delphi-Quellcode:
const
  faReadOnly = $00000001 platform;
  faHidden   = $00000002 platform;
  faSysFile  = $00000004 platform;
  faVolumeID = $00000008 platform;
  faDirectory = $00000010;
  faArchive  = $00000020 platform;
  faSymLink  = $00000040 platform;
  faAnyFile  = $0000003F;
...:cat:...

greyblue 7. Okt 2004 19:58

Re: FindFirst FindNext - Datei muss achiviert werden?
 
nun bin ich verwirrt,

nochmal die Frage, warum zeigt sich die Nicht-Achieve Datei nicht an?

Vielen Dank!!


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