TOC

This article has been localized into German by the community.

Dateibearbeitung:

Datei- und Ordnerinformationen

Die Datei- und Verzeichnisklassen, die wir in den vorherigen Kapiteln verwendet haben, eignen sich hervorragend für die direkte Bearbeitung von Dateien und Verzeichnissen. Manchmal möchten wir jedoch Informationen über sie erhalten, und der System.IO Namespace wird uns hierbei helfen: Die Klassen FileInfo und DirectoryInfo. In diesem Kapitel werden wir uns einige Möglichkeiten zur Verwendung dieser beiden Klassen ansehen.

Die FileInfo-Klasse

Lassen Sie uns zuerst einen einfachen Weg zur Verwendung der FileInfo-Klasse untersuchen.

static void Main(string[] args)
{
    FileInfo fi = new FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
    if(fi != null)
Console.WriteLine(String.Format("Information about file: {0}, {1} bytes, last modified on {2} - Full path: {3}", fi.Name, fi.Length, fi.LastWriteTime, fi.FullName));
    Console.ReadKey();
}

Wir erstellen eine neue Instanz der FileInfo-Klasse. Es ist ein Parameter erforderlich. Dies ist der Pfad zu der Datei, über die Informationen abgerufen werden sollen. Wir hätten nur einen Dateinamen angeben können, aber zum Spaß dachte ich, es wäre cool, Informationen über die eigentliche Anwendung zu erhalten, an der wir gerade arbeiten, das heißt die EXE-Datei, in die unser Projekt kompiliert wird. Da wir in einer Konsolenanwendung (die zur WinForms-Assembly gehört) keinen Zugriff auf das Anwendungsprojekt haben, verwenden wir ein wenig Reflection, um den Pfad zur aktuellen Assembly abzurufen. Dies ist alles außerhalb des Anwendungsbereichs dieses Kapitels, aber jetzt wissen Sie es.

Nachdem wir die FileInfo-Instanz erzeugt haben, können wir verschiedene Information ausgeben. Versuchen Sie die Applikation zu starten und sehen Sie selbst. Alles schön einfach und übersichtlich und wenn Sie sich die FileInfo-Klasse genauer anschauen werden Sie sehen dass diese Ihnen noch viel mehr Information zur verfügung stellt. Zudem auch auf Methoden der File-Klasse. Und wieso auch nicht, wir haben ja eine Referenz zu der Datei in der FileInfo-Instanz also können wir ja auch gleich dieselben Optionen wie die File-Klasse nutzen.

Die DirectoryInfo-Klasse

Nun sind Informationen zu einer einzelnen Datei in Ordnung, aber mithilfe der DirectoryInfo-Klasse können wir Informationen zu allen Dateien und Verzeichnissen in einem Verzeichnis abrufen, was offensichtlich ein sehr häufiges Szenario ist. Lassen Sie mich Ihnen ein einfaches Beispiel zeigen:

DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
if(di != null)
{
    FileInfo[] subFiles = di.GetFiles();
    if(subFiles.Length > 0)
    {
Console.WriteLine("Files:");
foreach(FileInfo subFile in subFiles)
{
    Console.WriteLine("   " + subFile.Name + " (" + subFile.Length + " bytes)");
}
    }
    Console.ReadKey();
}

Anstelle einer FileInfo-Instanz erstellen wir eine DirectoryInfo-Instanz. Wir verwenden den gleichen Trick, um den Pfad der ausführenden Datei und dann die Methode GetDirectoryName () aus der Path-Klasse abzurufen, um nur den Verzeichnisteil des Pfads abzurufen. Wir verwenden die Methode GetFiles (), um einen Array mit FileInfo-Instanzen zu erstellen, von denen jede eine Datei im Verzeichnis darstellt. Wir durchlaufen dann die Dateien und geben jeden Dateinamen und jede Größe in der Konsole aus.

Möglicherweise wollen wir auch die Verzeichnisse anzeigen lassen. Dies ist ebenso simpel:

DirectoryInfo[] subDirs = di.GetDirectories();
if(subDirs.Length > 0)
{
    Console.WriteLine("Directories:");
    foreach(DirectoryInfo subDir in subDirs)
    {
Console.WriteLine("   " + subDir.Name);
    }
}

In einigen Situationen benötigen Sie möglicherweise nur Dateien und Verzeichnisse mit einem bestimmten Namen oder einer bestimmten Dateiendung. Glücklicherweise unterstützen FileInfo und DirectoryInfo solche Anfragen ebenfalls

Hierdurch erhalten wir sämtliche Dateien im Verzeichnis, welche eine .exe-Dateiendung besitzen:

FileInfo[] subFiles = di.GetFiles("*.exe");

Dies wird uns alle Verzeichnisse auflisten, welche das Wort "test" irgendwo im Namen haben:

DirectoryInfo[] subDirs = di.GetDirectories("*test*");

Wir können sogar sowohl Dateien als auch Verzeichnisse gleichzeitig suchen, was bedeutet, dass in Unterverzeichnissen von Unterverzeichnissen von ... des ursprüngliche Verzeichnisses gesucht wird:

FileInfo[] subFiles = di.GetFiles("*.exe", SearchOption.AllDirectories);

Um nur das erste/oberste Verzeichnis zu durchsuchen, muss der Befehl so aussehen:

FileInfo[] subFiles = di.GetFiles("*.exe", SearchOption.TopDirectoryOnly);

Zusammenfassung

Mithilfe der FileInfo- und DirectoryInfo- Klassen können wir relativ einfach Informationen über das Dateisystem des Computers herausfinden, auf dem ein Programm läuft.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!