Wie durchsucht man in VB.NET 2003 alle TXT-Dateien in mehreren Ordnern nach einem Begriff und listet passende Dateien mit Ordner auf?

Antwort vom

**Ja. In VB.NET 2003 ist der saubere Weg: Ordner rekursiv durchlaufen, nur `*.txt` einsammeln, jede Datei mit `StreamReader` zeilenweise lesen und bei Treffer den vollständigen Pfad ausgeben. Der entscheidende Punkt ist: zeilenweise lesen statt komplette Dateien auf einmal laden, sonst wird es bei vielen oder großen Dateien unnötig langsam und speicherintensiv.** ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/visual-basic/developing-apps/programming/drives-directories-files/how-to-read-text-from-files-with-a-streamreader)) ## Beispiel für VB.NET 2003 ```vb Imports System.IO Module Modul1 Sub Main() Dim suchbegriff As String = "meinBegriff" ' Startordner hier eintragen SucheInOrdner("C:\Daten", suchbegriff) SucheInOrdner("C:\Texte", suchbegriff) Console.WriteLine("Fertig.") Console.ReadLine() End Sub Sub SucheInOrdner(ByVal ordner As String, ByVal suchbegriff As String) Dim dateien() As String Dim unterordner() As String Dim datei As String Try dateien = Directory.GetFiles(ordner, "*.txt") Catch ex As Exception Exit Sub End Try For Each datei In dateien If DateiEnthaeltBegriff(datei, suchbegriff) Then Console.WriteLine("Treffer: " & datei) End If Next Try unterordner = Directory.GetDirectories(ordner) Catch ex As Exception Exit Sub End Try Dim unterordnerPfad As String For Each unterordnerPfad In unterordner SucheInOrdner(unterordnerPfad, suchbegriff) Next End Sub Function DateiEnthaeltBegriff(ByVal dateiname As String, ByVal suchbegriff As String) As Boolean Dim sr As StreamReader Dim zeile As String Try sr = New StreamReader(dateiname) Do While Not sr.Peek() = -1 zeile = sr.ReadLine() If InStr(1, zeile, suchbegriff, CompareMethod.Text) > 0 Then sr.Close() Return True End If Loop sr.Close() Catch ex As Exception Return False End Try Return False End Function End Module ``` ## Warum das so sinnvoll ist `Directory.GetFiles` und `Directory.GetDirectories` sind für das Durchlaufen der Verzeichnisse der richtige Ansatz. Für ältere .NET-/VB.NET-Versionen ist die manuelle Rekursion oft robuster als sich auf modernere Komfortmethoden zu verlassen. ([oreilly.com](https://www.oreilly.com/library/view/vb-net-language/0596000928/re97.html)) `StreamReader` liest Textdateien zeilenweise. Das ist für eine Begriffssuche deutlich praktischer als die ganze Datei in einen String zu laden, vor allem wenn du nur wissen willst, **ob** ein Treffer vorkommt. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/visual-basic/developing-apps/programming/drives-directories-files/how-to-read-text-from-files-with-a-streamreader)) ## Wichtiger Unterschied Wenn du **nur Dateiname und Ordner** auflisten willst, reicht `Console.WriteLine(datei)`, denn im vollständigen Pfad steckt beides schon drin. Wenn du es getrennt ausgeben willst: ```vb Console.WriteLine("Datei: " & Path.GetFileName(datei)) Console.WriteLine("Ordner: " & Path.GetDirectoryName(datei)) ``` ## Praktisch wichtig Der häufigste Fehler bei solchen Routinen ist nicht die Suche selbst, sondern der Zugriff auf gesperrte oder nicht lesbare Ordner. Genau deshalb sind die `Try...Catch`-Blöcke hier wichtig: Die Suche bricht dann nicht komplett ab, sondern überspringt problematische Verzeichnisse oder Dateien. Für VB.NET 2003 ist das die passende Lösung. Moderner Code würde kompakter aussehen, aber für deine Umgebung ist dieser Ansatz korrekt, stabil und gut erweiterbar.

Kategorie: Technik Tags: VBNET TXTDateien Ordner

Verwandte Fragen

Kann man in VB.NET 2003 mit "Lines" arbeiten, ohne den String vorher in eine TextBox zu laden?

Ja. Lines ist nur eine bequeme Eigenschaft der TextBox; wenn du keinen Text in eine TextBox laden willst, zerlegst du den String direkt selbst in ein String-Array und arbeitest damit weiter. Der prakt...

Download-Ordner in Windows ändern?

Den Download-Ordner stellst du in Windows nicht an einer einzigen zentralen Stelle um, sondern meist pro Browser oder App – der wichtigste Unterschied ist: Den Systemordner „Downloads&ldqu...