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);
        }
예제 #2
0
        public void WatchAndSync()
        {
            _srcFileSystem
            .Watch()
            .Where(e => !_fileFilter.Filterd(e.Name))
            .Throttle(TimeSpan.FromSeconds(1))
            .Subscribe(e =>
            {
                _logger.LogTrace("File changes are detected.");

                Sync();
            });
        }