AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Findfirst findet Ordner wie System Volume Information nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Findfirst findet Ordner wie System Volume Information nicht?

Ein Thema von richard_boderich · begonnen am 2. Apr 2008 · letzter Beitrag vom 2. Apr 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 15:05
Zitat von richard_boderich:
Kann deine ADS Klasse vielleicht sowas?
Was hat meine ADS-Klasse zum Auslesen und Bearbeiten von alternativen Datenströmen bei NTFS Dateisystemen mit dem Setzen von Zugriffsberechtigungen von Ordnern und Dateien zu tun?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#12

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 15:34
Zitat von richard_boderich:
@taaktaak
Bist du dir da sicher? Diese Kombination habe ich auch schon ausprobiert?! Außerdem solltest du die Attribute niemals Addieren, sondern Logisch verknüpfen wurde hier mal gesagt.
Bei Win32 API werden die Parameter logisch verknüpft. Bei den meisten Delphi Funktionen (wie z.B. FindFirst) wird addiert.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 16:32
Zitat von wido:
Zitat von richard_boderich:
@taaktaak
Bist du dir da sicher? Diese Kombination habe ich auch schon ausprobiert?! Außerdem solltest du die Attribute niemals Addieren, sondern Logisch verknüpfen wurde hier mal gesagt.
Bei Win32 API werden die Parameter logisch verknüpft. Bei den meisten Delphi Funktionen (wie z.B. FindFirst) wird addiert.
Was aber definitiv falsch ist, da sich die Konstanten aus den WinAPI Konstanten zusammen setzen und es so oder so eine Bittabelle ist und somit logisch verknüpft werden müssen.

Addier doch einfach mal ein Wert zweifach oder faAnyFile dazu, dann haste deine Begründung warum das falsch ist und man definitiv OR verwenden sollte.

Was mich mal interessiert: Wodrauf beruht deine Aussage das die Addition richtig ist? Die Hilfe hat genügend Fehler und ist keine sichere Basis.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#14

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 17:29
Zitat:
Addier doch einfach mal ein Wert zweifach oder faAnyFile dazu, dann haste deine Begründung warum das falsch ist und man definitiv OR verwenden sollte.
Wieso sollte ich bei der Verwendung von faAnyFile überhaupt irgend eine andere Konstante addieren oder aber bitweise verknüpfen? Und natürlich, wenn ich Konstanten doppelt und dreifach addiere, dann funktioniert es nicht. Ändert nichts daran, daß eigentlich der komplette Code von CodeGear die Konstanten addiert und auch in der Hilfe dies der einzig dokumentierte Weg ist.

Mal davon abgesehen, daß z.B. ein faSysFile or faHidden or faDirectory das Selbe ist wie ein faSysFile + faHidden + faDirectory.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#15

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 18:07
Zitat von wido:
[Wieso sollte ich bei der Verwendung von faAnyFile überhaupt irgend eine andere Konstante addieren oder aber bitweise verknüpfen? Und natürlich, wenn ich Konstanten doppelt und dreifach addiere, dann funktioniert es nicht. .
Es ist nun mal so, dass die File Attribute bitcodiert sind!
siehe: http://msdn2.microsoft.com/en-us/library/aa365740(VS.85).aspx (Hinweis: link kopieren, direkt anklicken geht nicht)

Bit 0 - read only
Bit 1 - Hidden
....

Wenn man bestimmte Bits aktivieren möchte muss man OR benützen.
Wenn man bestimmte Bits ausblenden möchte muss man AND NO benützen.
Das sind Grundlagen der Informatik.

Wenn man z.B. alle Dateien ohne Verzeichnisse finden möchte dann schreibt man:
faAnyFile AND NOT faDirectory
Zitat von wido:
Ändert nichts daran, daß eigentlich der komplette Code von CodeGear die Konstanten addiert und auch in der Hilfe dies der einzig dokumentierte Weg ist.
Mal davon abgesehen, daß z.B. ein faSysFile or faHidden or faDirectory das Selbe ist wie ein faSysFile + faHidden + faDirectory.
Das ist nur ein Scheinargument. Wenn falsche Dinge im Internet verbreitet werden, bedeutet das nicht, dass sie damit richtig werden.
Andreas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 18:24
Zitat von wido:
Wieso sollte ich bei der Verwendung von faAnyFile überhaupt irgend eine andere Konstante addieren oder aber bitweise verknüpfen?
Es war ein offensichtliches Beispiel. Schon allein wenn du das als Vorbelegung einer Variablen nimmst welche später dem FindFirst übergeben wird und dazwischen diese Variable noch angepasst wird, kann dies passieren.

Zitat von wido:
Und natürlich, wenn ich Konstanten doppelt und dreifach addiere, dann funktioniert es nicht.
Und wenn du das schreibst, ist es dir doch ganz genau bewusst das es Bitkonstanten sind und man diese somit nicht addiert, gerade weil ein falsches Ergebnis rauskommt.

Zitat von wido:
Ändert nichts daran, daß eigentlich der komplette Code von CodeGear die Konstanten addiert und auch in der Hilfe dies der einzig dokumentierte Weg ist.
Wobei sich CodeGear nicht rausnimmt unfehlbar zu sein und es gibt genug Falschaussagen in der VCL/Delphi Hilfe. Ich erinnere da nur an das case-insensitive IndexOf() bei TStrings.

Zitat von wido:
Mal davon abgesehen, daß z.B. ein faSysFile or faHidden or faDirectory das Selbe ist wie ein faSysFile + faHidden + faDirectory.
not not true ist auch wieder true, trotzdem schreibt man's nicht.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#17

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 19:11
Es ist schon erstaunlich. Da macht man jahrelang etwas nicht richtig. Es führt nie zu einem Fehler oder unkorrekten Ergebnis. Trotzdem ist es, nüchtern betrachtet, falsch. Die Diskussion hat mich überzeugt. Künftig wird's nur noch mit OR Verknüpft!

Bemerkenswert dabei, das man auch im Falle solcher (scheinbaren) Nebensächlichkeiten häufig noch etwas dazu lernen kann!
Vielen Dank allen Beteiligten!
Ralph
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#18

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 19:17
Schauts, wir brauchen darüber eigentlich nicht zu diskutieren.

CodeGear möchte, daß man die Werte addiert. Es ist so von ihnen dokumentiert und sie selbst handhaben es innerhalb des VCL Codes ebenfalls so. Das man es bitcodieren kann, hab ich nie bestritten. Wie gesagt, sollte das Bit bzw. die Bits nicht gesetzt sein, erhält man bei der Addition mit der Konstante den selben Wert wie bei nem OR. Allerdings bevorzuge ich im Zweifelsfall dann doch eher die dokumentierte Methode alleine schon deshalb um eine gewisse Zukunftssicherheit für meinen Code zu gewährleisten.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 20:00
Zitat von wido:
Allerdings bevorzuge ich im Zweifelsfall dann doch eher die dokumentierte Methode alleine schon deshalb um eine gewisse Zukunftssicherheit für meinen Code zu gewährleisten.
Rofl - ehrlich - schon allein dadurch baust du dir selber eine Unsicherheit für die Zukunft. Schon allein da CodeGear diesen Fehler mit spätestens D7 in der Hilfe umformuliert hat und die Abfrage von Attributen mit dem AND Operator erklärt.

Zitat:
Um ein Attribut zu testen, führen Sie eine AND-Verknüpfung des Attr-Feldes mit der Attributkonstante durch. Besitzt die Datei das betreffende Attribut, ist der zurückgegebene Wert größer als 0. Wurde beispielsweise eine verborgene Datei gesucht, ergibt der folgende Ausdruck true:

Delphi: (SearchRec.Attr and faHidden) <> 0.
C++: (SearchRec.Attr & faHidden) != 0.
Mir kommt es eher so vor, als wenn CodeGear für dich unfehlbar ist und du blind folgst. So lange man dir nicht sagt "stehen bleiben", gehst du weiter auf die Klippe zu, wider besserem Wissens.

Zitat von wido:
CodeGear möchte, daß man die Werte addiert. Es ist so von ihnen dokumentiert und sie selbst handhaben es innerhalb des VCL Codes ebenfalls so.
Das Beispiel wurde spätestens mit Delphi 7 aus der Hilfe entfernt. Ansonsten sehe ich keine Stelle wo CodeGear das selbst so macht. Und in den VCL Codes nutzen sie immer "or", "and not" bzw. "and" im Zusammenhang mit diesen Attributflags. Nirgendwo, wirklich nirgendwo, habe ich diese Addition in den VCL Quellen im Zusammenhang mit diesen Attributflags gefunden.

FileIsReadOnly, FileSetReadOnly, etc machen dies so.

Das beste Beispiel ist sogar die erste Zeile der FindFirst Implementation von Codegear:   faSpecial = faHidden or faSysFile or faVolumeID or faDirectory; (Copyright (c) 1995-2002 Borland Softwrare Corporation) Der Schreibfehler ist Original!

Ich kann diese sture Haltung bezüglich überzeugender Argumente wirklich nicht verstehen - und ich finde über sowas muss man diskutieren. Schon grundlegend weil wir hier Informationen anbieten und damit verbreiten von denen viele andere lernen - oftmals still und leise durch die SuFu, google, etc. Von daher kann ich es nicht mit mir vereinbaren etwas gut zu heissen was definitiv und "bewiesener Maßen" falsch ist. Als das größte deutschsprachige Delphi-Forum und zusätzlich zu Delphi als Lehrsprache in den Schulen haben wir eine gewisse Verantwortung und somit muss man darüber diskutieren.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#20

Re: Findfirst findet Ordner wie System Volume Information ni

  Alt 2. Apr 2008, 20:23
Ok, da das Signal, das ich mit dem letzten Posting setzen wollte, offensichtlich nicht deutlich genug war:

E.O.D.

Du kannst Deine Zeit aber gerne noch weiter damit vertreiben mich davon zu überzeugen, daß ich Unrecht habe und Du nicht. Mein Standpunkt, daß ich bei 2 möglichen Methoden stets die nutze, die dokumentiert ist, wird sich dadurch nicht ändern:

Zitat:
Attributes can be combined by adding (Delphi) or or-ing (C++) their constants or values. For example, to search for read-only and hidden files in addition to normal files, pass (faReadOnly + faHidden) in Delphi or (faReadOnly | faHidden) in C++ as the Attr parameter. To include only normal files, pass zero for the Attr parameter.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 22:48 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