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 ich in VB.NET 2003 Standard auch ohne die Option „Klassenbibliothek“ DLLs erstellen?

Ja – auch in VB.NET 2003 kannst du DLLs erstellen, selbst wenn im Dialog „Neues Projekt“ keine „Klassenbibliothek“ auswählbar ist. Entscheidend ist nicht der Projekt...

Gibt es für VB.NET 2003 eine neuere RTF-Box-Version mit SelectionBackColor zum Download?

Nein – für VB.NET 2003 liegt das Problem nicht an deiner „RTF-Box-Version“, sondern am alten .NET-/WinForms-Wrapper: SelectionBackColor gehört nicht zum damaligen RichTextB...