Dateiattribute mit C# auslesen

Hallo zusammen,

ich entwickle gerade ein Programm, von dem ein Fragment die Attribute von Dateien und Ordnern auslesen soll. Da ich vorher noch nie mit C# gearbeitet habe, stoße ich dabei etwas an meine Grenzen.
Mein Frage lautet daher:

Gibt es eine Möglichkeit um Dateiattribute (wie z.B. versteckt, schreibgeschützt, Änderungsdatum, chmod (?) evtl.) auszulesen?

Ich habe es bisher so versucht:

FileInfo file = new FileInfo(textBox1.Text);
if (file.Attributes == FileAttributes.Hidden)
{MessageBox.Show(„Versteckt“);}
else
{MessageBox.Show(„Nicht versteckt“);}

Natürlich ist da noch ein bisschen Code drumrum (Exception-Handling usw.), aber das ist für das Problem nicht relevant.
Bei dem Beispiel oben wird mir bei einer versteckten Datei gesagt, dass sie nicht versteckt ist.

Gibt es eine einfache Möglichkeit für meine Problemstellung?

Vielen Dank und viele Grüße,
schattenjaeger

Hallo zusammen,

ich entwickle gerade ein Programm, von dem ein Fragment die
Attribute von Dateien und Ordnern auslesen soll. Da ich vorher
noch nie mit C# gearbeitet habe, stoße ich dabei etwas an
meine Grenzen.
Mein Frage lautet daher:

Gibt es eine Möglichkeit um Dateiattribute (wie z.B.
versteckt, schreibgeschützt, Änderungsdatum, chmod (?) evtl.)
auszulesen?

Ich habe es bisher so versucht:

FileInfo file = new FileInfo(textBox1.Text);
if (file.Attributes == FileAttributes.Hidden)
{MessageBox.Show(„Versteckt“);}
else
{MessageBox.Show(„Nicht versteckt“);}

Natürlich ist da noch ein bisschen Code drumrum
(Exception-Handling usw.), aber das ist für das Problem nicht
relevant.
Bei dem Beispiel oben wird mir bei einer versteckten Datei
gesagt, dass sie nicht versteckt ist.

Gibt es eine einfache Möglichkeit für meine Problemstellung?

Mit C++ habe ich weniger am Sinn, aber C++ ist
immer auch C.
Bitte schau mal hier:
http://www.tu-chemnitz.de/urz/kurse/unterlagen/C/kap… unter
Bibliotheksfunktionen: stat, fstat

Hallo Schattenjaeger

Versuchs doch mal hiermit:

FileInfo file = new FileInfo(textBox1.Text);

if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{MessageBox.Show(„Versteckt“);}
else
{MessageBox.Show(„Nicht versteckt“);}

Ich hoffe, damit klaptts!

Grüsse, Marion

Vielen Dank, das hat mir sehr weitergeholfen.
Dann habe ich noch eine Frage dazu. Kann ich diese Attribute dann z.B. als String auch ausgeben?
Konkret hätte ich gerne im o.g. Beispiel
„Hidden“ ausgegeben. Kann ich das nur über eine If-Abfrage machen oder geht das auch noch anders, z.B. mit files.Attributes.Hidden.irgendwas?

Mit der ToString()-Methode erhälst du alle Attribute hintereinander aufgereiht:

string s = file.Attributes.ToString();

In deinem Beispiel wäre das dann vermutlich „Hidden, Archive“
Dann könntest du mit der String.Split() Methode oder ähnliches weiterfahren.

1 Like

Perfekt! Vielen Dank :smile:
Jetzt habe ich alles, was ich benötige :smile: Juhu!

Hallo,

Gibt es eine einfache Möglichkeit für meine Problemstellung?

Die Lösung über FileInfo stellt meines Wissens die optimale Lösung dar und ich wüsste nicht, wo da noch etwas optimiert werden sollte? (ist ja nur eine Zeile Quelltext!)

Darf ich fragen was Sie zu dieser Frage veranlasst hat?

Gruss,
Honeyhead

Hey Schattenjaeger,

ich kann dir dazu leider nichts sagen, der Code sieht richtig aus, wüsste nicht, warum es nicht klappen sollte.
Ich selber habe noch nie ein solchen Code in meinen Programmen gebraucht, von daher diese Properties auch noch nie angewandt… :confused: tut mir Leid! :frowning:

Liebe Grüße,
steathdriver

Die Klasse File bietet einige Funktionen, wie zum Beispiel Änderungsdatum.
http://msdn.microsoft.com/en-us/library/system.io.fi…

Beispiele zu Dateiattributen findest du zum Beispiel hier:
http://www.csharp-examples.net/file-attributes/

Hi schattenjaeger,

hab leider auch keine Ahnung von C#. Dein Code sieht nicht schlecht aus. Ist hidden eine Funktion oder Variable? Bei Funktion wäre noch () zu schreiben. Besser wäre vllt. eine Funktion dafür zu verwenden, die muss es auch geben, als in alter DOS-Manier direkt auf die Variable zuzugreifen. :smile:

Am schnellsten findest du den Fehler, wenn du debuggen kannst - Variablen inspizieren …
Wenn das nicht geht bei dir, würde ich den Spieß zum Test mal umdrehen. Suche nach nicht-hidden und Schleife so lassen. Nach der Ausgabe kannst du dann schließen, in welchem Bereich der Fehler zu suchen ist…

Hoffentlich hilfts
daniel

Hallo,

das Änderungsdatum solltest du mit LastWriteTime erhalten.
Die Rechte solltest du mit

// check whether a file is read only
bool isReadOnly = ((File.GetAttributes(filePath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly);

// check whether a file is hidden
bool isHidden = ((File.GetAttributes(filePath) & FileAttributes.Hidden) == FileAttributes.Hidden);

// check whether a file has archive attribute
bool isArchive = ((File.GetAttributes(filePath) & FileAttributes.Archive) == FileAttributes.Archive);

// check whether a file is system file
bool isSystem = ((File.GetAttributes(filePath) & FileAttributes.System) == FileAttributes.System);

Erfahren.

LG

Hallo Schattenjaeger,

ich schätze, es liegt einfach an Deiner IF-Bedingung:

if (file.Attributes == FileAttributes.Hidden)

Probiere es mit:

if((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)

Erläuterung:
Hat eine Datei das Attribut Hidden(=2) und Archive(=32), hat es den Wert 34. Dies entspricht natürlich niemals dem Wert 2 für Hidden. Über die Abfrage oben findest Du heraus, ob der Wert den Du suchst in den Flags „enthalten“ ist.

Viele Grüße,
Salbei

Hallo,
auf den Seiten

http://msdn.microsoft.com/de-de/library/system.io.fi…

ist eine gute Beschreibung.

Hallo,

sorry für die späte Antwort. Aus irgendeinem Grund bin ich erst jetzt auf Deine Frage Aufmerksam geworden.

Du weißt es mittlerweile wahrscheinlich schon, aber für den Fall, dass jemand über eine Suche auf diese Frage stößt, gebe ich hier trotzdem noch die Antwort.

Der FileAttributes Typ ist als Bitmaske implementiert. Das heißt, jedes der 32 Bit in der Binärdarstellung von FileAttributes repräsentiert ein Flag (z.B. (FileAttributes.ReadOnly oder FileAttributes.Hidden), das entweder gesetzt ist (1) oder nicht (0).

Um herauszufinden, welche Flags in einer FileAttribute Variablen gesetzt sind, verundet man die Variable bitweise mit dem Enum Wert des Flags, auf das man testen möchte und prüft, ob das Ergebnis nicht 0 ist.

Dein Beispiel würde dann so aussehen:

FileInfo file = new FileInfo(textBox1.Text);
if ((file.Attributes & FileAttributes.Hidden) != 0)
 MessageBox.Show("Versteckt");
else
 MessageBox.Show("Nicht versteckt");

Gruß
Alex