// сохранение списка копий книг в xml-файл
        private void saveCopiesListToXml(ref BackgroundWorker bw, ref DoWorkEventArgs e, int GroupCountForList,
                                         string ToDirName, int CompareMode, string CompareModeName)
        {
            if (!Directory.Exists(ToDirName))
            {
                Directory.CreateDirectory(ToDirName);
            }
            int ThroughGroupCounterForXML = 0;                  // "сквозной" счетчик числа групп для каждого создаваемого xml файла копий
            int GroupCounterForXML        = 0;                  // счетчик (в границых CompareModeName) числа групп для каждого создаваемого xml файла копий
            int XmlFileNumber             = 0;                  // номер файла - для формирования имени создаваемого xml файла копий

            // копии fb2 книг по группам
            if (m_listViewFB2Files.Groups.Count > 0)
            {
                ProgressBar.Maximum = m_listViewFB2Files.Items.Count;
                XDocument doc = createXMLStructure(CompareMode, CompareModeName);

                int  BookInGroups       = 0;                // число книг (books) в Группах (Groups)
                int  GroupCountInGroups = 0;                // число Групп (Group count) в Группах (Groups)
                bool one = false;
                foreach (ListViewGroup lvGroup in m_listViewFB2Files.Groups)
                {
                    if (bw.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    addAllBookInGroup(ref bw, ref e, ref doc, lvGroup, ref BookInGroups, ref GroupCountInGroups);

                    ++GroupCounterForXML;
                    ++ThroughGroupCounterForXML;
                    doc.Root.Element("SelectedItem").SetValue(
                        (m_LastSelectedItem <= GroupCountForList && ThroughGroupCounterForXML <= GroupCountForList)
                                                ? m_LastSelectedItem.ToString()
                                                : "0"
                        );
                    if (GroupCountForList <= m_listViewFB2Files.Groups.Count)
                    {
                        if (GroupCounterForXML >= GroupCountForList)
                        {
                            setDataForNode(ref doc, GroupCountInGroups, BookInGroups);
                            doc.Save(
                                Path.Combine(ToDirName, StringProcessing.makeNNNStringOfNumber(++XmlFileNumber) + ".dup_lbc")
                                );
                            doc.Root.Element("Groups").Elements().Remove();
                            GroupCountInGroups = 0;
                            GroupCounterForXML = 0;
                            BookInGroups       = 0;
                        }
                        else
                        {
                            // последний диаппазон Групп
                            if (ThroughGroupCounterForXML == m_listViewFB2Files.Groups.Count)
                            {
                                setDataForNode(ref doc, GroupCountInGroups, BookInGroups);
                                doc.Save(
                                    Path.Combine(ToDirName, StringProcessing.makeNNNStringOfNumber(++XmlFileNumber) + ".dup_lbc")
                                    );
                            }
                        }
                    }
                    else
                    {
                        setDataForNode(ref doc, GroupCountInGroups, BookInGroups);
                        one = true;
                    }
                }                 // по всем Группам
                if (one)
                {
                    doc.Save(Path.Combine(ToDirName, "001.dup_lbc"));
                }
            }
        }
示例#2
0
        // =============================================================================================
        //                          СОХРАНЕНИЕ РЕЗУЛЬТАТА ПОИСКА КОПИЙ В XML-ФАЙЛЫ
        // =============================================================================================
        #region Сохранение результата поиска копий в xml-файлы
        /// <summary>
        /// Сохранение результата сразу в xml-файлы без построения визуального списка
        /// </summary>
        /// <param name="bw">Ссылка на объект класса BackgroundWorker</param>
        /// <param name="e">Ссылка на объект класса DoWorkEventArgs</param>
        /// <param name="GroupCountForList">Число Групп в Списке Групп</param>
        /// <param name="CompareMode">Вид сравнения при поиске копий</param>
        /// <param name="CompareModeName">Название вида сравнения при поиске копий</param>
        /// <param name="ht">Хэш-таблица данных на Группы (копии fb2 книг по Группам)</param>
        /// <returns>Признак непрерывности обработки файлов</returns>
        public bool saveCopiesListToXml(BackgroundWorker bw, DoWorkEventArgs e, int GroupCountForList,
                                        int CompareMode, string CompareModeName, Label StatusLabel, ProgressBar ProgressBar,
                                        ref StatusView sv, string SourceDir, bool ScanSubDirs,
                                        int GroupCountForListIndex, bool IsSaveGroupToXMLWithoutTree, HashtableClass ht)

        {
            // блокировка отмены сохранения результата в файлы
            StatusLabel.Text   += "Сохранение результата поиска в xml-файлы (папка '_Copies') без построения дерева копий...\r";
            ProgressBar.Maximum = ht.Values.Count;
            ProgressBar.Value   = 0;

            const string ToDirName = "_Copies";

            if (!Directory.Exists(ToDirName))
            {
                Directory.CreateDirectory(ToDirName);
            }

            // "сквозной" счетчик числа групп для каждого создаваемого xml файла копий
            int ThroughGroupCounterForXML = 0;
            // счетчик (в границых CompareModeName) числа групп для каждого создаваемого xml файла копий
            int GroupCounterForXML = 0;
            // номер файла - для формирования имени создаваемого xml файла копий
            int XmlFileNumber = 0;

            // копии fb2 книг по группам
            if (ht.Values.Count > 0)
            {
                XDocument doc = createXMLStructure(CompareMode, CompareModeName, SourceDir, ScanSubDirs,
                                                   GroupCountForListIndex, IsSaveGroupToXMLWithoutTree);

                int  BookInGroups       = 0; // число книг (books) в Группах (Groups)
                int  GroupCountInGroups = 0; // число Групп (Group count) в Группах (Groups)
                int  i   = 0;                // прогресс
                bool one = false;
                // сортировка ключей (групп)
                List <string> keyList = makeSortedKeysForGroups(ht);
                foreach (string key in keyList)
                {
                    ++sv.Group; // число групп одинаковых книг
                    // формирование представления Групп с их книгами
                    addAllBookInGroup(bw, e, doc, (FB2FilesDataInGroup)ht[key], ref BookInGroups, ref GroupCountInGroups, ref sv);

                    ++GroupCounterForXML;
                    ++ThroughGroupCounterForXML;
                    doc.Root.Element("SelectedItem").SetValue("0");
                    if (GroupCountForList <= ht.Values.Count)
                    {
                        if (GroupCounterForXML >= GroupCountForList)
                        {
                            string FileNumber = StringProcessing.makeNNNStringOfNumber(++XmlFileNumber) + ".dup_lbc";
                            setDataForNode(doc, GroupCountInGroups, BookInGroups);
                            doc.Save(Path.Combine(ToDirName, FileNumber));
                            StatusLabel.Text += "Файл: '_Copies\\" + FileNumber + "' создан...\r";
                            doc.Root.Element("Groups").Elements().Remove();
                            GroupCountInGroups = 0;
                            GroupCounterForXML = 0;
                            BookInGroups       = 0;
                        }
                        else
                        {
                            // последний диаппазон Групп
                            if (ThroughGroupCounterForXML == ht.Values.Count)
                            {
                                string FileNumber = StringProcessing.makeNNNStringOfNumber(++XmlFileNumber) + ".dup_lbc";
                                setDataForNode(doc, GroupCountInGroups, BookInGroups);
                                doc.Save(Path.Combine(ToDirName, FileNumber));
                                StatusLabel.Text += "Файл: '_Copies\\" + FileNumber + "' создан...\r";
                            }
                        }
                    }
                    else
                    {
                        setDataForNode(doc, GroupCountInGroups, BookInGroups);
                        one = true;
                    }
                    bw.ReportProgress(i++);

                    if (bw.CancellationPending)
                    {
                        e.Cancel = true;
                        return(false);
                    }
                } // по всем Группам
                if (one)
                {
                    StatusLabel.Text += @"Файл: '_Copies\001.dup_lbc' ...\r";
                    doc.Save(Path.Combine(ToDirName, "001.dup_lbc"));
                }
            }
            return(true);
        }