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?
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, 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?
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?
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… tut mir Leid!
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.
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…
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.
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");