private void Search() { foreach (String drive in Directory.GetLogicalDrives()) { Console.Out.WriteLine(drive); foreach (DirectoryInfo child in getDirectories(drive)) { Console.Out.WriteLine(child.FullName); FindFiles(child); } } } private void FindFiles(DirectoryInfo dir) { try { DirectoryInfo[] children = getDirectories(dir); if (children.Length > 0) { foreach (DirectoryInfo child in children) { Console.Out.WriteLine(child.FullName); FindFiles(child); } } else { FileInfo[] Files = dir.GetFiles("*.txt"); if (Files.Length > 0) { //Found some text files. //Do something } } } } private bool AttrOn(FileAttributes attr, FileAttributes field) { return (attr & field) == field; } public DirectoryInfo[] getDirectories(DirectoryInfo dir) { if (On(dir.Attributes, FileAttributes.Offline)) { Console.Out.WriteLine(dir.Name + " is not mapped "); return new DirectoryInfo[] { }; } if (!dir.Exists) { Console.Out.WriteLine(dir.Name + " does not exist "); return new DirectoryInfo[] { }; } try { return dir.GetDirectories(); } catch (Exception ex) { Console.Out.WriteLine(ex.Message); Console.Out.WriteLine(ex.StackTrace); return new DirectoryInfo[] { }; } } public DirectoryInfo[] getDirectories(String strDrive) { DirectoryInfo dir = new DirectoryInfo(strDrive); return getDirectories(dir); }