Home   Cover Cover Cover Cover
 

Gleichnamige Typen aus verschiedenen Namensräumen

ParallelSearch.cs
/* Paralleles Lesen und Suchen in Textdateien
   ------------------------------------------
   Es sollen alle C#-Dateien eines Verzeichnisses gelistet werden,
   die einen bestimmten Suchstring enthalten. Das Lesen der einzelnen
   Dateien sowie das Suchen in ihnen soll parallel mittels Parallel.ForEach() 
   erfolgen.
   
   Der Name des zu durchsuchenden Verzeichnisses sowie das Suchmuster
   werden als Kommandozeilenargumente uebergeben.
      
   Aufruf: ParallelSearch directoryName searchPattern
------------------------------------------------------------*/
using System;
using System.IO;
using System.Threading.Tasks;

public class ParallelSearch {
    
  public static void Main(string[] arg) {
    if (arg.Length == 2) {
      try {
        string dirName = arg[0];
        string pattern = arg[1];
        
        //-- get the names of all files in the directory
        DirectoryInfo dir = new DirectoryInfo(dirName);
        FileInfo[] files = dir.GetFiles("*.cs");
        
        //-- read and search the files in parallel;
        Console.WriteLine("Files in " + dir.FullName + " containing '" + pattern + "'");
        Parallel.ForEach(files, file => {
          StreamReader r = new StreamReader(file.FullName);
          string s = r.ReadToEnd();
          if (s.IndexOf(pattern) >= 0){
            Console.WriteLine("  " + file.Name);
          }
        });
      } catch (ArgumentException) {
        Console.WriteLine("-- Invalid directory name");
      }
    } else {
      Console.WriteLine("-- Synopsis: AsyncSearch directoryName searchPattern");
    }
  }
}