AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetFileAttributes bzw. FileSetAttr setzen Attribute nicht r.
Thema durchsuchen
Ansicht
Themen-Optionen

SetFileAttributes bzw. FileSetAttr setzen Attribute nicht r.

Ein Thema von Die Muhkuh · begonnen am 7. Jan 2005 · letzter Beitrag vom 8. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

SetFileAttributes bzw. FileSetAttr setzen Attribute nicht r.

  Alt 7. Jan 2005, 17:37
Hi,

so setze ich Datei-Attribute:

Delphi-Quellcode:
Attrib := faAnyFile;
      if cbProtectedFile.Checked then
        Attrib := Attrib + faReadOnly
      else
        Attrib := Attrib - faReadOnly;

      if cbArchiv.Checked then
        Attrib := Attrib + faArchive
      else
        Attrib := Attrib - faArchive;

      if cbHiddenFile.Checked then
        Attrib := Attrib + faHidden
      else
        Attrib := Attrib - faHidden;

      if cbSystemFile.Checked then
        Attrib := Attrib + faSysFile
      else
        Attrib := Attrib - faSysFile;

      FileSetAttr(FDoc.FFilename, Attrib);
Wenn ich Z.B. nur auf "cbProtectedFile" klicke so das es "checked" ist, und diese Procedure ausführe werden zwar Datei-Attribute gesetzt, aber die Falschen. Woran kann das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 17:57
das liegt daran das du
Attrib := faAnyFile; geschrieben hast. faAnyFile beinhaltet schon alle Attribute und du addierst noch welche drauf.
Außerdem beinhaltet faAnyFile, faDirectory was aber zum setzen nicht nötig ist da man dieses attribut über die funktion nicht setzen kannst (sonst würdest du damit aus einer Datei ein verzeichnis machen können)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 18:32
Moin!

Und die einzelnen Attribute sind einzelne Bits und werden im Normalfall mit oder verknüpft...

MfG
Muetze1
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 18:46
Moin Spider,

der Wert muss mit 0 initialisiert werden.
Addieren geht dann, wie Mütze ja schon sagte mit or, abziehen mit and not.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 18:58
Zitat von Christian Seehase:
Moin Spider,

der Wert muss mit 0 initialisiert werden.
Addieren geht dann, wie Mütze ja schon sagte mit or, abziehen mit and not.
Hi,

das mit 0 hab ich auch grad gefunden.


Addieren geht aber auch so, oder?

Delphi-Quellcode:
Attrib := 0;
      if cbProtectedFile.Checked then
        Attrib := Attrib + faReadOnly;

      if cbArchiv.Checked then
        Attrib := Attrib + faArchive;

      if cbHiddenFile.Checked then
        Attrib := Attrib + faHidden;

      if cbSystemFile.Checked then
        Attrib := Attrib + faSysFile;

      FileSetAttr(FDoc.FFilename, Attrib);
Ansonsten so?
Delphi-Quellcode:
Attrib := 0;
      if cbProtectedFile.Checked then
        Attrib := Attrib or faReadOnly;

      if cbArchiv.Checked then
        Attrib := Attrib or faArchive;

      if cbHiddenFile.Checked then
        Attrib := Attrib or faHidden;

      if cbSystemFile.Checked then
        Attrib := Attrib or faSysFile;

      FileSetAttr(FDoc.FFilename, Attrib);
[edit=Christian Seehase]Delphi-Tag geschlossen. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
mung

Registriert seit: 20. Mai 2004
8 Beiträge
 
#6

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 19:00
Delphi-Quellcode:
    
 Attrib := 0; //Initialisieren
 Attrib := Attrib or
              byte(cbProtectedFile.Checked) or
              (byte(cbHiddenFile.Checked) shl 1) or
              (byte(cbSystemFile.Checked) shl 2) or
              (byte(cbArchiv.Checked ) shl 5) ; //Bits an die richtige stelle schieben

 FileSetAttr(FDoc.FFilename, Attrib);
shl (SHiftLeft) schiebt die bit nach links, also: (0001 shl 1) = 0010
dann noch alles oder verknüpt und fertig ist das Attribut

mfg mung
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 19:13
Moin Manuel,

solange Du nicht die Zahlenwerte kennst, die jeweils dahinterstecken, solltest Du keinesfalls bei solchen Bitmasken mit + arbeiten.
Es gibt nämlich viele Fälle, in denen hinter den Konstantenbezeichnern schon die Kombination von Einzelkonstanten steckt (hier z.B. faAnyFile), so dass bei Addition durch Übertrag die falschen Bits gesetzt werden, bzw. nicht die, die Du haben willst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 7. Jan 2005, 22:15
Moin!

@mung: warum vorher noch 0 setzen?

Delphi-Quellcode:
Attrib :=
              byte(cbProtectedFile.Checked) or
              (byte(cbHiddenFile.Checked) shl 1) or
              (byte(cbSystemFile.Checked) shl 2) or
              (byte(cbArchiv.Checked ) shl 5) ; //Bits an die richtige stelle schieben

FileSetAttr(FDoc.FFilename, Attrib);
MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 8. Jan 2005, 09:04
Also das mit dem Addieren ist völlig OK solange er nur einzelAttribute addiert. Dementsprechend war
Delphi-Quellcode:
Attrib := 0;
      if cbProtectedFile.Checked then
        Attrib := Attrib + faReadOnly;

      if cbArchiv.Checked then
        Attrib := Attrib + faArchive;

      if cbHiddenFile.Checked then
        Attrib := Attrib + faHidden;

      if cbSystemFile.Checked then
        Attrib := Attrib + faSysFile;

      FileSetAttr(FDoc.FFilename, Attrib);
völlig korrekt da keienr der faXXXXX Werte eine Kompinanten mehrere Attribute ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: SetFileAttributes bzw. FileSetAttr setzen Attribute nich

  Alt 8. Jan 2005, 16:28
Moin SirThornberry,

Zitat von SirThornberry:
völlig korrekt da keienr der faXXXXX Werte eine Kompinanten mehrere Attribute ist.
In diesem Falle schon, aber spätestens wenn man integer nimmt, und ein Bit an der Vorzeichenstelle steht, oder man die Werte nicht kennt hat man ggf. verloren.
Ich halte es für sinnvoll bei Bitfeldern nur logische Operatoren zu verwenden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:02 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