public async Task Start(CancellationToken cancellationToken) { if (!Directory.Exists(Settings.DirectoryPath)) { Directory.CreateDirectory(Settings.DirectoryPath); } Console.WriteLine("Starting Marker Watch Engine."); foreach (var fi in Directory.GetFiles(this.Settings.DirectoryPath)) { EnqueueFile(fi); } this.MonitorDirectory(this.Settings.DirectoryPath); while (!cancellationToken.IsCancellationRequested) { while (FilesQueue.Count > 0) { var file = FilesQueue.Dequeue(); await ProcessFile(file); } await Task.Delay(2000); } }
private static void FilesSearchAndQueue(string reg, string entryDir) { try { foreach (var file in Directory.EnumerateFiles(entryDir, "*.*", SearchOption.TopDirectoryOnly)) { AllFiles++; ActionForm.PauseEvent.WaitOne(); var filename = Path.GetFileName(file); if (!Regex.IsMatch(filename, reg)) { continue; } FilesQueue.Enqueue(file); } } catch { // ignored } }
/// <exception cref="Exception"><c>Exception</c>.</exception> internal static void ScanDrive(TheImport theImport, KeyValuePair<EnhancedDriveInfo, List<string>> driveRootFolders, ref FilesQueue filesQueue) { var allFoundFiles = new List<EnhancedFileInfo>(); var foundFiles = new List<EnhancedFileInfo>(); try { ImageCache cachedImages = new ImageCache(); foreach (string rootFolder in driveRootFolders.Value) { if (Directory.Exists(rootFolder)) { foundFiles.Clear(); foundFiles.AddRange(FindFiles(theImport, rootFolder)); RootFolderHandlerBase rootFolderHandler = RootFolderHandlerProvider.ProvideRootFolderHandlerInstance( theImport, driveRootFolders.Key, rootFolder, foundFiles, cachedImages); RootFolderHandlerExecuter.Execute(rootFolderHandler); allFoundFiles.AddRange(foundFiles); } else { theImport.Importer.LogMessages.Enqueue( new LogMessage("Warn", "RootFolder doesn't exist: " + rootFolder)); } } EnhancedFileInfo[] foundFilesArray = allFoundFiles.ToArray(); filesQueue .Enqueue (foundFilesArray); } catch (Exception ex) { theImport.Importer.LogMessages.Enqueue(new LogMessage("Error", ex.ToString())); throw; } finally { allFoundFiles.Clear(); foundFiles.Clear(); } theImport.Importer.LogMessages.Enqueue (new LogMessage("Debug", "Return from ScanDrive")); }