コード例 #1
0
        private List <List <MatchResult> > GetDuplicatesFromGroup(IReadOnlyCollection <IComparableFile> fileGroup, SearchContext context, CancellationToken cancellationToken)
        {
            var duplicates = new List <List <MatchResult> >();

            foreach (var fileFromGroup in fileGroup)
            {
                try
                {
                    if (ContainsFile(duplicates, fileFromGroup))
                    {
                        continue;
                    }

                    DuplicatesSearchProgress?.Invoke(this, new DuplicatesSearchProgressEventArgs(fileFromGroup.FileData.FullName, null));

                    var fileFromGroupDuplicates = GetFileDuplicates(fileFromGroup, fileGroup, context, cancellationToken);

                    if (fileFromGroupDuplicates.Count != 0)
                    {
                        duplicates.Add(fileFromGroupDuplicates);
                    }
                }
                finally
                { context.CurrentFileIndex++; }
            }

            return(duplicates);
        }
コード例 #2
0
        private void GetDuplicatesFromCandidates(IReadOnlyCollection <IComparableFile[]> duplicateCandidates, IFileComparerConfig comparerConfig, CancellationToken cancellationToken)
        {
            var context = new SearchContext {
                ComparerConfig = comparerConfig, TotalFilesCount = duplicateCandidates.AsParallel().Sum(group => group.Length)
            };

            foreach (var duplicateCandidateGroup in duplicateCandidates)
            {
                var groupDuplicates = GetDuplicatesFromGroup(duplicateCandidateGroup, context, cancellationToken);
                if (groupDuplicates.Count == 0)
                {
                    continue;
                }

                var(duplicatesCount, duplicatesSize) = GetGroupDuplicatedCountAndSize(groupDuplicates);
                context.DuplicateGroupsCount        += groupDuplicates.Count;
                context.DuplicateFilesCount         += duplicatesCount;
                context.DuplicatedTotalSize         += duplicatesSize;
                DuplicatesSearchProgress?.Invoke(this, new DuplicatesSearchProgressEventArgs(null, context));

                foreach (var group in groupDuplicates)
                {
                    DuplicatesGroupFound?.Invoke(this, new DuplicatesGroupFoundEventArgs(group));
                }
            }
        }