Exemplo n.º 1
0
        /// <summary>
        /// Получить список файлов из указанного пути.
        /// </summary>
        public bool GetFiles()
        {
            if (!IsSourceFolderExists(Path))
            {
                return(false);
            }
            Count = 0;
            foreach (var fileName in Directory.GetFiles(Path, "*", System.IO.SearchOption.AllDirectories))
            {
                var fileInfo = new FileInfo(fileName);
                var fileDesc = new FileDesc
                {
                    Name            = fileName,
                    Size            = fileInfo.Length,
                    CreationTime    = fileInfo.CreationTime,
                    Guid            = Guid.NewGuid(),
                    MD5Summ         = string.Empty,
                    CountDuplicates = 0
                };

                FullListFiles.Add(fileDesc);
                Count++;
            }

            FindDuplicatedBySize();
            CountDuplicated();

            return(true);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Удалить элемент из списка по идентификатору.
        /// </summary>
        /// <param name="id"></param>
        public void DeleteItem(Guid id)
        {
            var itemToDelete = FullListFiles.Where(x => x.Guid == id).Select(x => x).First();

            EdfFiles.DeleteFile(itemToDelete.Name);
            FullListFiles.Remove(itemToDelete);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Отобрать дубликаты по размеру файла и рассчитать для них контрольную сумму.
        /// </summary>
        private void FindDuplicatedBySize()
        {
            var groupBySize = FullListFiles
                              .GroupBy(f => new { f.Size })
                              .Select(g => new { size = g.Key.Size, count = g.Count() })
                              .Where(_ => _.count > 1)
                              .ToArray();

            // FillListFiles(listViewCandidate, groupBySize);
            // Перебор полученных файлов.
            foreach (var info in groupBySize)
            {
                foreach (var fileDesc in FullListFiles)
                {
                    if (fileDesc.Size.ToString() == (info.size.ToString()))
                    {
                        fileDesc.MD5Summ = GetMD5HashFromFile(fileDesc.Name);
                    }
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Подсчитать дубликаты по контрольной сумме и размеру.
        /// </summary>
        private void CountDuplicated()
        {
            var groupByMD5 = FullListFiles
                             .GroupBy(f => new { f.MD5Summ, f.Size })
                             .Select(g => new { md5 = g.Key.MD5Summ, size = g.Key.Size, count = g.Count() })
                             .Where(_ => _.count > 1)
                             .ToArray();

            this.CountUnique     = 0;
            this.CountDuplicates = 0;
            foreach (var info in groupByMD5)
            {
                CountUnique++;
                for (int i = 0; i < FullListFiles.Count; i++)
                {
                    // Устанавливаем количество, есть MD5 совпадают.
                    if (FullListFiles[i].MD5Summ == info.md5)
                    {
                        FullListFiles[i].CountDuplicates = info.count;
                        CountDuplicates++;
                    }
                }
            }
        }