/// <summary>
        /// Валидация fb2, fb2.zip ли fbz файлов по пути FilePath
        /// </summary>
        /// <returns>Пустая строка, файл валиден; Строка с сообщением, если файл невалиден</returns>
        public string ValidatingFB2File(string FilePath)
        {
            bool   IsZip  = false;
            string Result = validate(FilePath, Settings.Settings.SchemePath, ref IsZip);

            if (IsZip)               //  удаляем временные файлы только, если проверяли архив
            {
                FilesWorker.RemoveDir(_TempDir);
            }
            return(Result);
        }
        /// <summary>
        /// Сравнение 2-х файлов: fb2, fb2 из zip или fb2 из fbz
        /// </summary>
        /// <param name="DiffPath">Путь к diff-программе сравнения fb2 файла</param>
        /// <param name="FB2File1Path">Путь к 1-му исходному fb2, zip или fbz-файлу</param>
        /// <param name="FB2File2Path">Путь ко 2-му исходному fb2, zip или fbz-файлу</param>
        /// <param name="TempDirForFile1">Путь к временной папке для 1-го распакованного fb2 файла </param>
        /// <param name="TempDirForFile2">Путь к временной папке для 2-го распакованного fb2 файла </param>
        public static void DiffFB2(string DiffPath, string FB2File1Path, string FB2File2Path, string TempDirForFile1, string TempDirForFile2)
        {
            Cursor.Current = Cursors.WaitCursor;
            string TempFile1Path = null;
            string TempFile2Path = null;

            // создание путей (или распаковка) к исходным fb2 файлам, участвующим в сравнении
            if (FilesWorker.isFB2File(FB2File1Path))
            {
                TempFile1Path = FB2File1Path;
            }
            else if (FilesWorker.isFB2Archive(FB2File1Path))
            {
                TempFile1Path = getFileFromZipFBZ(FB2File1Path, TempDirForFile1);
            }

            if (FilesWorker.isFB2File(FB2File2Path))
            {
                TempFile2Path = FB2File2Path;
            }
            else if (FilesWorker.isFB2Archive(FB2File2Path))
            {
                TempFile2Path = getFileFromZipFBZ(FB2File2Path, TempDirForFile2);
            }

            // Сравнение файлов
            if (!string.IsNullOrWhiteSpace(TempFile1Path) && !string.IsNullOrWhiteSpace(TempFile2Path))
            {
                FilesWorker.StartDiff(true, DiffPath, TempFile1Path, TempFile2Path);
            }

            // завершенн работы (перепаковка файла(ов), если он(они) были извлечены из архива)
            if (FilesWorker.isFB2Archive(FB2File1Path) && !string.IsNullOrWhiteSpace(TempFile1Path))
            {
                WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, TempFile1Path, FB2File1Path);
            }
            if (FilesWorker.isFB2Archive(FB2File2Path) && !string.IsNullOrWhiteSpace(TempFile2Path))
            {
                WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, TempFile2Path, FB2File2Path);
            }

            // удаление временных файлов, если они есть
            FilesWorker.RemoveDir(TempDirForFile1);
            FilesWorker.RemoveDir(TempDirForFile2);
            Cursor.Current = Cursors.Default;
        }
 /// <summary>
 /// Правка fb2 и перепаковка fb2 из zip, fbz
 /// </summary>
 /// <param name="SourceFilePath">Путь к исходному fb2, zip или fbz-файлу</param>
 /// <param name="FB2ProgramPath">Путь к программе правки fb2 файла</param>
 public static void StartFB2_FBZForEdit(string SourceFilePath, string FB2ProgramPath)
 {
     Cursor.Current = Cursors.WaitCursor;
     if (FilesWorker.isFB2Archive(SourceFilePath))
     {
         string TempFileFromZipPath = getFileFromZipFBZ(SourceFilePath, m_TempDir);
         if (!string.IsNullOrWhiteSpace(TempFileFromZipPath))
         {
             FilesWorker.StartFile(true, FB2ProgramPath, TempFileFromZipPath);
             WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, TempFileFromZipPath, SourceFilePath);
             FilesWorker.RemoveDir(m_TempDir);
         }
     }
     else
     {
         FilesWorker.StartFile(true, FB2ProgramPath, SourceFilePath);
     }
     Cursor.Current = Cursors.Default;
 }