004
10.03.2008, 00:36 Uhr
gipfelstuermer
|
Zitat von Hans: |
Hi,
okay, habe Dein Problem verstanden. FILE_ATTRIBUTE_READONLY ist kein DWORD, sondern ein symbolischer Name für ein einzelnes Bit in einem DWORD. Wenn Du die *.h - Dateien mal danach durchsuchst, findest Du in der Datei winnt.h folgende Zeile:
C++: |
#define FILE_ATTRIBUTE_READONLY 0x00000001
|
Das bedeutet, das der Bezeichnung FILE_ATTRIBUTE_READONLY der Wert 0x00000001 oder einfach 1 zugewiesen wird. Deshalb kann man in der Abfrage oben anstatt
C++: |
if(Attrib & FILE_ATTRIBUTE_READONLY) ...
|
auch
schreiben. Das hätte die gleiche Funktion, und wird im übersetzten Programm auch im Prinzip so stehen. Aber die Bedeutung erschliesst sich einem nicht gleich, wenn man das so im Programmtext liesst.
Hans
|
Achso, Danke. In der API steht das nicht so richtig. Eine Frage noch: Wie kann ich denn, wenn Attribute deaktivieren?? Ich habe da was geschrieben, aber es funktioniert leider nicht. Schreibschutz und Archiv sind Checkboxen. Reicht eine Negation mit anschliessender Oder-Verknüpfung aus, um ein Attribut zu deaktivieren?
C++: |
DWORD Flags; Flags=GetFileAttributes(Dateiname); if (Schreibschutz->Checked==true) SetFileAttributes(Dateiname,Flags | FILE_ATTRIBUTE_READONLY); else SetFileAttributes(Dateiname,Flags | !FILE_ATTRIBUTE_READONLY); Flags=GetFileAttributes(Dateiname); if (Archiv->Checked==true) SetFileAttributes(Dateiname,Flags | FILE_ATTRIBUTE_ARCHIVE); else SetFileAttributes(Dateiname,Flags | !FILE_ATTRIBUTE_ARCHIVE);
|
Was mich verwirrt ist, dass es funktioniert, wenn nur Schreibschut aktivieren/deaktivieren will und den ganzen Kram mt dem dem Archiv auskommentiere im Code. Wenn es so ist, wie im obigen Code, funktioniert das ganze nicht mehr. So lassen sich beide Attribute nicht deaktivieren... |