Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi faAnyFile - faDirectory findet keine Dateien mit Attr. e,c (https://www.delphipraxis.net/126909-faanyfile-fadirectory-findet-keine-dateien-mit-attr-e-c.html)

PeterPanino 4. Jan 2009 20:04


faAnyFile - faDirectory findet keine Dateien mit Attr. e,c
 
Hallo, kennt sich jemand gut mit Dateiattributen aus, oder speziell mit der Funktion AdvBuildFileList aus der JCL?
Die folgende Funktion findet zwar brav alle Dateien (auch mit verschiedenen Attributen), aber keine komprimierten und keine verschlüsselten Dateien (OS = Vista)! (Komprimiert und verschlüsselt bedeutet natürlich mit dem Eigenschaftsdialog komprimiert und verschlüsselt).

Delphi-Quellcode:
if AdvBuildFileList(MyPath + '*',
                    faAnyFile - faDirectory, // nur Dateien suchen, keine Ordner
                    FileList,
                    amSuperSetOf,
                    [flRecursive]) then

Christian Seehase 4. Jan 2009 20:22

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Moin Peter,

probier' mal ob es so besser geht:

Delphi-Quellcode:
faAnyFile and not faDirectory, // nur Dateien suchen, keine Ordner
Arithmetische Operatoren sollte man bei Bitfeldern/Flags, und um diese handelt es sich bei den Attributen, niemals verwenden, sondern nur logische (Verknüpfen mir OR, ausmaskieren mit AND bzw. abziehen mit AND NOT).

PeterPanino 4. Jan 2009 21:01

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Zitat:

Zitat von Christian Seehase
Moin Peter,

probier' mal ob es so besser geht:

Delphi-Quellcode:
faAnyFile and not faDirectory, // nur Dateien suchen, keine Ordner
Arithmetische Operatoren sollte man bei Bitfeldern/Flags, und um diese handelt es sich bei den Attributen, niemals verwenden, sondern nur logische (Verknüpfen mir OR, ausmaskieren mit AND bzw. abziehen mit AND NOT).

Danke, Christian, für den Hinweis! Ich habe jetzt and not verwendet, aber das Problem besteht immer noch. Wie gesagt, die Attribute Hidden, ReadOnly und Archive beeinflussen das Ergebnis nicht. Nur Dateien, die verschlüsselt oder komprimiert sind, werden nicht gezählt!

Hawkeye219 4. Jan 2009 21:34

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Hallo,

in der Konstanten faAnyFile sind wohl die erweiterten Attribute (compressed, encrypted,...) nicht enthalten.

Hier zwei Seiten zum Studieren: Link 1 Link 2

Gruß Hawkeye

jfheins 4. Jan 2009 21:47

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Wenn die Flags die gleichen sind wie die, die die Windows-Funktion braucht, dann kannste es mal mit diesen Werten versuchen ;)

Also sowas wie
Delphi-Quellcode:
const
faNewAnyFile = faAnyFile or $800 or $4000; // Kompr. & Verschl. Dateien einbeziehen

PeterPanino 4. Jan 2009 22:30

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Zitat:

Zitat von jfheins
Wenn die Flags die gleichen sind wie die, die die Windows-Funktion braucht, dann kannste es mal mit diesen Werten versuchen ;)

Also sowas wie
Delphi-Quellcode:
const
faNewAnyFile = faAnyFile or $800 or $4000; // Kompr. & Verschl. Dateien einbeziehen

jfheins, danke, damit werden jetzt auch die verschlüsselten und komprimierten Dateien gefunden!

Wieso hat CodeGear (diese Konstanten sind ja in SysUtils definiert) diese Konstanten noch nicht angepasst?

jfheins 4. Jan 2009 22:38

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Zitat:

Zitat von PeterPanino
Wieso hat CodeGear (diese Konstanten sind ja in SysUtils definiert) diese Konstanten noch nicht angepasst?

Gute Frage :mrgreen:

Vielleicht zählt man bei denen komprimierte Dateien nicht zu "Any File" sondern zu "Not a file but some stuff we don't want" :stupid:

Kannst ja mal nen QC-Report erstellen ;)

PeterPanino 4. Jan 2009 23:13

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Zitat:

Zitat von Hawkeye219
Hier zwei Seiten zum Studieren: Link 1 Link 2

Gruß Hawkeye

Die Beiträge dort sind ja jetzt aber schon fünf- bis sechstausend Jahre alt ... (also sowas wie Höhlenmalereien) ...

taaktaak 4. Jan 2009 23:18

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Nearly, but nevertheless the missing attributes are listed
Zitat:

FILE_ATTRIBUTE_COMPRESSED = $00000800;
FILE_ATTRIBUTE_OFFLINE = $00001000;
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000;
FILE_ATTRIBUTE_ENCRYPTED = $00004000;

PeterPanino 5. Jan 2009 10:55

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Jetzt wird es völlig rätselhaft!!! Unabhängig von Dateiattributen, Dateiendungen, Dateigröße, Dateityp usw. (ich habe das sehr ausführlich getestet!) werden manche Dateien gefunden und manche nicht!! Also in irgendetwas müssen sich die Dateien noch unterscheiden! Gibt es noch ein unbekanntes Dateiattribut?

jfheins 5. Jan 2009 11:12

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Bist du dir sicher dass es nicht mit den Attributen zusammenhängt? Wie hast du das getestet? (Archiv-Attribut vielleicht? ntfs-Links?)

Um sozusagen alles was kreucht und fleucht einzufangen kannst du ja mal das hier probieren:

Delphi-Quellcode:
const
faNewAnyFileEx = $00017FFF; // Wirklich alles

PeterPanino 5. Jan 2009 11:34

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Ich glaub ich werde verrückt! Mit faNewAnyFileEx werden jetzt zwar alle Dateien gefunden, aber jetzt ist die Zahl der gefundenen Dateien zu hoch!!!!!

In dem Testordner befinden sich 34 Dateien (nein, es sind WIRKLICH keine versteckten Dateien in dem Ordner), aber faNewAnyFileEx findet jetzt 36 (!) Dateien!! Und wenn ich in dem Testordner einen neuen leeren Ordner erzeuge, werden gleich 3 Dateien mehr angezeigt, also 39 !!!

PeterPanino 5. Jan 2009 11:42

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Aha, die jeweils 2 zusätzlichen Dateien sind "." und "..". Deswegen werden beim Erzeugen eines leeren Ordners gleich 3 neue Dateien gezählt.

Wie bist du übrigens auf den Wert von faNewAnyFileEx gekommen?

PeterPanino 5. Jan 2009 11:49

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Die ultimative Lösung scheint faNewAnyFileEx and not faDirectory zu sein: Dabei werden alle Dateien gefunden und sowohl richtige Ordner als auch "." und ".." ausgesiebt.

Aber wieso faNewAnyFile (ohne Ex) zwar die komprimierten und verschlüsselten Dateien findet, jedoch die vorher genannten Dateien nicht, ist mir immer noch ein Rätsel!

jfheins 5. Jan 2009 12:29

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
nun ja, faAnyFile ist ja gleich $0000003F;

Das heißt, faAnyFile ist eine Kombination der folgenden:

faReadOnly = $00000001;
faHidden = $00000002;
faSysFile = $00000004;
faVolumeID = $00000008;
faDirectory = $00000010;
faArchive = $00000020;

Die (und nur die) werden also gefunden.

Das faNewAnyFile was ich zuerst vorgeschlagen habe, fügt zu diesem Set noch die Flags "Compressed" und "Encrypted" hinzu, sodass diese beiden Arten zusätzlich gefunden werden.

Das faNewAnyFileEx = $00017FFF; ist nun eine Kombination aus allen Flags, die ich im msdn finden konnte.

Es findet also alles was von findfirstfile zurückgegeben wird und seien es virtuelle oder eine offline-Datei.

PeterPanino 5. Jan 2009 13:02

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Danke, jfheins. Wie kann ich herausfinden, welche von den auf der msdn-Seite aufgelisteten Attributen eine Datei hat? Gibt es dafür ein fertiges Utility? Dann könnte ich nämlich herausfinden, welches Attribut dafür verantwortlich ist, dass faNewAnyFile bestimmte Dateien nicht gefunden hat.

jfheins 5. Jan 2009 13:18

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
GetFileAttributes(dateiname) liefert dir die Attribute einer Datei als DWORD, d.h. als Bitmaske ;)

DeddyH 5. Jan 2009 13:19

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Ansonsten faAnyFile beiseite legen und die gesuchten Attribute verodern.

PeterPanino 5. Jan 2009 22:13

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Ich habe jetzt ein kleines Tool geschrieben, mit dem man die erweiterten Attribute anzeigen kann:

http://resource.dopus.com/viewtopic.php?p=48003

Wie man auf dem folgenden Screenshot sieht, haben alle Laufwerks-Wurzelverzeichnisse (auch C:, D: usw.) das Hidden-Attribut! Kann mir das mal jemand erklären?

http://img183.imageshack.us/img183/6...iverootkk2.gif

Christian Seehase 5. Jan 2009 22:29

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Moin Peter,

Attribute muss man immer im Zusammenhang sehen, da das OS die Bits für die Attribute nicht immer gleich verwendet.
Wofür jetzt das Hidden-Attribut bei Laufwerksbuchstaben verwendet wird, weiss ich allerdings auch nicht.

fkerber 5. Jan 2009 22:38

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Hi!

Es wäre klasse, wenn du das Bild in den Anhang packen könntest.
Dann bliebe es uns auch erhalten, wenn der externe Server mal down ist und die Ladezeit des Threads wäre auch geringer.

Ciao, Frederic


P.S.:
Wenn du das Programm noch bei uns unter Freeware oder gar OpenSource veröffentlichen würdest, wäre dir sicher niemand böse :angel:

PeterPanino 5. Jan 2009 23:05

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Zitat:

Zitat von fkerber
Wenn du das Programm noch bei uns unter Freeware oder gar OpenSource veröffentlichen würdest, wäre dir sicher niemand böse :angel:

Klar, hab ich gemacht: http://www.delphipraxis.net/internal...t.php?p=984227

fkerber 5. Jan 2009 23:10

Re: faAnyFile - faDirectory findet keine Dateien mit Attr. e
 
Hi!

Super!
Da es aber ja quasi ein fertiges Programm ist, habe ich es nach OpenSource verschoben!


Ciao, Frederic


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