Feedback

C# - Text in Textdateien suchen

Veröffentlicht von am 10.05.2011
(2 Bewertungen)
Dieser Code gibt eine ArrayList mit den Namen(inkl. Pfad) aller Textdateien im Suchverzeichnis und dessen Unterverzeichnisse zurück die den gesuchten String beinhalten.
public static List<string> SearchStringInTextFiles(string pfad, string search)
{
  List<string> matchFiles = new List<string>();
  if (search != "")
  {
    string pattern = search;
    string[] metaChars = new string[] { @"\", @"*", @"+", @"?", @".", @"(", @")", @"[", @"]", @"{", @"}", @"/", @"|", @"^", @"$" };
    foreach (string s in metaChars)
    {
      pattern = pattern.Replace(s, @"\" + s);
    }
    foreach (string fileName in Directory.GetFiles(pfad, "*.txt", SearchOption.AllDirectories))
    {
      string[] lines = File.ReadAllLines(fileName);
      if (lines.Length > 0)
      {
        if (System.Text.RegularExpressions.Regex.IsMatch(String.Join(Environment.NewLine, lines), pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
        {
          matchFiles.Add(fileName);
        }
      }
    }
  }
  return matchFiles;
}
Abgelegt unter Datei, durchsuchen.

3 Kommentare zum Snippet

Scavanger schrieb am 15.05.2011:
ArrayList ist veraltet, und gehört dringendst eingemottet, es gibt keinen Grund mehr die untypisierten Listen zu verwenden, verwende stattdessen eine generische Liste, in diesem Fall List<string>.
Andi Mahr schrieb am 19.05.2011:
@Scavanger
Du hast recht. Habs entsprechend geändert.
stuemi schrieb am 05.03.2018:
Habe den Code in mein Projekt eingebaut und alles klappt soweit einwandfrei.
Mir ist jedoch aufgefallen, dass wenn ich den gleichen Ordner unmittelbar danach noch einmal durchsuche, die Suche weitaus schneller durchläut. Warte ich etwas (z.B. 1. Stunde) und durchsuche dann noch einmal den Ordner, dauert es wieder länger. (ca. 12000 Textdateien bei 100 Zeilen pro Datei).
Wird da etwas im Hintergrund gespeichert, was weitere Suchen beschleunigt? Wenn ja, hat man irgendwie Einfluss darauf?
 

Logge dich ein, um hier zu kommentieren!