/// <summary> /// генерация списка fb2-файлов из папки /// возвращает: список fb2-файлов из папки, либо null, если fb2 файлов в архиве не было /// </summary> /// <param name="sFromDir"> - папка-источник;</param> /// <param name="bSort">true - сортировать список;</param> /// <param name="bFB2Only">true - список только fb2-файлов</param> public static List <string> MakeFileListFromDir(string sFromDir, bool bSort, bool bFB2Only) { List <string> lFilesList = null; if (Directory.Exists(sFromDir)) { string [] files = Directory.GetFiles(sFromDir); if (files.Length != 0) { lFilesList = new List <string>(); int nFB2 = 0; foreach (string sFile in files) { if (bFB2Only) { if (FilesWorker.isFB2File(sFile)) { lFilesList.Add(sFile); ++nFB2; } } else { lFilesList.Add(sFile); } } if (bFB2Only && nFB2 == 0) { return(null); } if (bSort) { lFilesList.Sort(); } } } return(lFilesList); }
/// <summary> /// Хеширование по Авторам с одинаковыми Фамилиями и инициалами /// </summary /// <param name="bw">Экземплар фонового обработчика класса BackgroundWorker</param> /// <param name="e">Экземпляр класса DoWorkEventArgs</param> /// <param name="FilesList">Список файлов для сканирования</param> /// <param name="htFB2ForAuthorFIO">Хеш Таблица для сбора одинаковых Авторов книг</param> /// <param name="WithMiddleName">Учитывать ли отчество Авторов (true) или нет (false) при поиске</param> /// <returns>Признак непрерывности обработки файлов</returns> public bool FilesHashForAuthorFIOParser(BackgroundWorker bw, DoWorkEventArgs e, Label StatusLabel, ProgressBar ProgressBar, string TempDir, List <string> FilesList, HashtableClass htFB2ForAuthorFIO, bool WithMiddleName) { StatusLabel.Text += "Хэширование в контексте Авторов с одинаковой Фамилией и инициалами...\r"; ProgressBar.Maximum = FilesList.Count; ProgressBar.Value = 0; List <string> FinishedFilesList = new List <string>(); for (int i = 0; i != FilesList.Count; ++i) { if (FilesWorker.isFB2File(FilesList[i])) { // заполнение хеш таблицы данными о fb2-книгах в контексте Авторов с одинаковой Фамилией и инициалами MakeFB2AuthorFIOHashTable(null, FilesList[i], ref htFB2ForAuthorFIO, WithMiddleName); // обработанные файлы FinishedFilesList.Add(FilesList[i]); } else { if (FilesWorker.isFB2Archive(FilesList[i])) { try { if (_sharpZipLib.UnZipFB2Files(FilesList[i], TempDir) != -1) { string[] files = Directory.GetFiles(TempDir); if (files.Length > 0) { if (FilesWorker.isFB2File(files[0])) { // заполнение хеш таблицы данными о fb2-книгах в контексте Авторов с одинаковой Фамилией и инициалами MakeFB2AuthorFIOHashTable(FilesList[i], files[0], ref htFB2ForAuthorFIO, WithMiddleName); // обработанные файлы FinishedFilesList.Add(FilesList[i]); } } } } catch (Exception ex) { Debug.DebugMessage( FilesList[i], ex, "Дубликатор.CompareForm.FilesHashForAuthorFIOParser(): Хеширование файлов в контексте Авторов с одинаковой Фамилией и инициалами." ); } FilesWorker.RemoveDir(TempDir); } } bw.ReportProgress(i); // отобразим данные в контролах if (bw.CancellationPending) { // удаление из списка всех файлов обработанные книги (файлы) WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList); e.Cancel = true; return(false); } } // удаление элементов таблицы, value (списки) которых состоят из 1-го элемента _compComm.removeNotCopiesEntryInHashTable(htFB2ForAuthorFIO); // удаление из списка всех файлов обработанные книги (файлы) WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList); return(true); }