Exemplo n.º 1
0
        ///// <summary>
        ///// Формирует список файлов содержащихся в указанном каталоге
        ///// Файлы включаются в результирующий список если удовлетворяют условиям определённым в параметре options
        ///// </summary>
        ///// <param name="folder">
        ///// каталог в котором искать файлы
        ///// </param>
        ///// <param name="filelist">
        ///// Список найденных файлов
        ///// </param>
        ///// <param name="options">
        ///// условия которым должен удовлетворять файл для включения в список файлов
        ///// </param>
        ///// <returns></returns>

        /// <summary>
        /// Формирует список файлов содержащихся в указанном каталоге
        /// Файлы включаются в результирующий список если удовлетворяют условиям определённым в параметре options
        /// </summary>
        /// <param name="folder">
        /// каталог в котором искать файлы
        /// </param>
        /// <param name="filelist">
        /// Список найденных файлов
        /// </param>
        /// <param name="options">
        /// условия которым должен удовлетворять файл для включения в список файлов
        /// </param>
        /// <returns></returns>
        private async Task GetFolderFiles(Folder folder, CancellationToken canselationToken, OperationStatus status)
        {
            status.Id = SearchStatus.NewFileSelected;
            var progress = _progress as IProgress <OperationStatus>;

            try // Каталог может быть удалён после того как начался поиск дубликатов
            {
                var storageFolder = await StorageFolder.GetFolderFromPathAsync(folder.FullName);

                List <string> l = new List <string>();
                l.AddRange(_fileSelectionOptions.FileTypeFilter.Where(f => f != ""));
                var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, _fileSelectionOptions.FileTypeFilter.Where(f => f != ""));
                var query        = storageFolder.CreateFileQueryWithOptions(queryOptions);
                foreach (StorageFile item in await query.GetFilesAsync())
                {
                    canselationToken.ThrowIfCancellationRequested();

                    if (_fileSelectionOptions.ExcludeExtentions.Contains(item.FileType))
                    {
                        continue;
                    }

                    File file = new File(item.Name, item.Path, item.FileType, item.DateCreated.DateTime,
                                         new DateTime(), 0, folder.IsPrimary, folder.IsProtected);
                    Windows.Storage.FileProperties.BasicProperties basicproperties = await item.GetBasicPropertiesAsync();

                    file.DateModifyed = basicproperties.DateModified.DateTime;
                    file.Size         = basicproperties.Size;
                    _filesCollection.Add(file);
                    ++status.HandledItems;
                    progress.Report(status);
                }
            }
            catch (FileNotFoundException ex)
            {
                status.Id      = SearchStatus.Error;
                status.Message = $"{ex.Message} ' {folder.FullName} '";
                throw new OperationCanceledException();
            }
        }
Exemplo n.º 2
0
        private void ReportStatus(OperationStatus status)
        {
            _status = status.Id;
            switch (status.Id)
            {
            case SearchStatus.NewFileSelected:
                SearchStatusInfo = string.Format("Selecting files. Total files selected {0}.", status.HandledItems);
                break;

            case SearchStatus.Grouping:
                SearchStatusInfo = string.Format("Groupping files by {0}. Handled {1} files from {2}.",
                                                 status.Stage, status.HandledItems, status.TotalItems);
                break;

            case SearchStatus.GroupingCompleted:
                SearchStatusInfo = string.Format("Grouping complete. Regrouped {0} duplicates into {1} groups.",
                                                 _duplicatesCollection.FilesCount, _duplicatesCollection.Count);
                break;

            case SearchStatus.ComparingStarted:
            case SearchStatus.Comparing:
                SearchStatusInfo = string.Format("Comparing files by {0}. Compared {1} files from {2}.",
                                                 status.Stage, status.HandledItems, status.TotalItems);
                break;

            case SearchStatus.Sorting:
                SearchStatusInfo = $"Sorting files by {status.Stage}.";
                break;

            case SearchStatus.SearchCompleted:
                SearchStatusInfo = string.Format("Search completed. Found {0} duplicates in {1} groups.",
                                                 _duplicatesCollection.FilesCount, _duplicatesCollection.Count);
                break;

            case SearchStatus.SearchCanceled:
                SearchStatusInfo = string.Format("Search canceled.");
                break;

            case SearchStatus.GroupingCanceled:
                SearchStatusInfo = string.Format("Grouping canceled.");
                break;

            case SearchStatus.ResultsCleared:
                SearchStatusInfo = string.Format("Search results cleared.");
                break;

            case SearchStatus.StartCancelOperation:
                SearchStatusInfo = string.Format("Canceling current operation.");
                break;

            case SearchStatus.Error:
                status.Message   = status.Message.Replace('\r', ' ');
                status.Message   = status.Message.Replace('\n', ' ');
                SearchStatusInfo = string.Format("Error: {0} Operation canceled.", status.Message);
                break;
            }
            SearchStatusChanged?.Invoke(this, status.Id);

            if (OperationCompleted)
            {
                _duplicatesCollection.Invalidate();
            }
        }