|
class Program
{
private static int nbFiles;
private static int nbMatchFiles;
static void Main(string[] args)
{
nbFiles = 0;
nbMatchFiles = 0;
SearchFor(@"C:\Pierrick\Projects\dotnet", "coucou", true);
Console.WriteLine(string.Format("Total files : {0}", nbFiles));
Console.WriteLine(string.Format("found in files : {0}", nbMatchFiles));
Console.WriteLine("Enter to quit");
Console.ReadLine();
}
private static void SearchFor(string path, string text, bool recurse)
{
Parallel.ForEach(Directory.GetFiles(path, "*.cs"), csFilePath =>
{
Interlocked.Increment(ref nbFiles);
Parallel.Do(() => FindInFile(csFilePath, text));
});
if (recurse)
Parallel.ForEach(Directory.GetDirectories(path), dirName => SearchFor(dirName, text, recurse));
}
private static void FindInFile(string csFilePath, string text)
{
Console.WriteLine(string.Format("thId:{0}, Search in {1}",System.Threading.Thread.CurrentThread.ManagedThreadId,Path.GetFileName(csFilePath)));
if (File.ReadAllText(csFilePath).IndexOf(text) >= 0)
Interlocked.Increment(ref nbMatchFiles);
}
} |