public DirectoryStructureComparer Compare(IFileSystem srcFileSystem, IFileSystem destFileSystem) { if (srcFileSystem == null) { throw new ArgumentNullException(nameof(srcFileSystem)); } if (destFileSystem == null) { throw new ArgumentNullException(nameof(destFileSystem)); } _logger.LogDebug("Computing the directory structure..."); var srcFilePaths = srcFileSystem .EnumerateFiles() .AsParallel() .Where(sfp => !_fileFilter.Filterd(sfp)) .ToHashSet(); var destFilePaths = destFileSystem .EnumerateFiles() .AsParallel() .Where(sfp => !_fileFilter.Filterd(sfp)) .ToHashSet(); _logger.LogDebug("Computed the directory structure..."); _addingFiles = srcFilePaths.Except(destFilePaths).ToArray(); _removingFiles = destFilePaths.Except(srcFilePaths).ToArray(); _files = srcFilePaths.Where(sf => destFilePaths.Contains(sf)).ToArray(); _logger.LogInformation($"AddingFiles = {_addingFiles.Length}, RemovingFiles = {_removingFiles.Length}, Files = {_files.Length}."); return(this); }
public void WatchAndSync() { _srcFileSystem .Watch() .Where(e => !_fileFilter.Filterd(e.Name)) .Throttle(TimeSpan.FromSeconds(1)) .Subscribe(e => { _logger.LogTrace("File changes are detected."); Sync(); }); }