コード例 #1
0
        /// <summary>
        /// Логика загрузки слепка данных
        /// </summary>
        /// <param name="archiver"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public virtual DataSet LoadDumpFile(IArchiver archiver, string filePath = null)
        {
            var serializer = SyncSettings.DataSerializer as IDataSerializer <DataSet>; //кастую сериалайзер, к сериалайзеру работающему с dataset

            DataSet result;

            try
            {
                if (serializer == null)
                {
                    throw new InvalidCastException("Настройки сериалайзера не позволяют привести объект к DataSet");
                }

                string directory = AppDomain.CurrentDomain.BaseDirectory; //по умолчанию директория запуска

                if (filePath == null)
                {
                    filePath = Path.Combine(directory, SyncSettings.ExportFileName); //если не указан произвольный путь, вычисляю путь к файлу синхронизации
                }
                else
                {
                    directory = Path.GetDirectoryName(filePath); //если указан произвольный путь к файлу, получаю путь к директории
                }
                if (directory == null)
                {
                    throw new Exception("Не удалось получить путь к директории загрузки");
                }

                //временная директория
                var dir = new DirectoryInfo(Path.Combine(directory, SyncSettings.TempFolderName));

                if (dir.Exists)
                {
                    dir.Delete(true);
                }

                archiver.Decompress(new FileInfo(filePath), new DirectoryInfo(directory)); //распаковываю слепок данных


                var jsonPath = Path.Combine(dir.FullName,
                                            string.Concat(Path.GetFileNameWithoutExtension(filePath),
                                                          SyncSettings.DataSerializer.FileExtenssion)); //путь к файлу с сериализованными данными БД

                if (!File.Exists(jsonPath))
                {
                    jsonPath = Path.Combine(dir.FullName, string.Concat(Resources.cDefaultDataFilenamePrefix, SyncSettings.DataSerializer.FileExtenssion));
                }

                if (!File.Exists(jsonPath))
                {
                    throw new FileNotFoundException("Не удалось обнаружить данные сериализации");
                }


                SyncSettings.Logger.Info("Чтение данных...");

                result = serializer.DeserializeData(jsonPath); //дессериализация

                RowsToUpdateCount = 0;

                foreach (DataTable item in result.Tables)
                {
                    RowsToUpdateCount += item.Rows.Count;
                }


                SyncSettings.Logger.Info("Загрузка слепка данных прошла успешно...");
            }
            catch (Exception ex)
            {
                SyncSettings.Logger.Error(ex);
                Out(ex.ToString());
                throw;
            }


            return(result); //возвращаю дессериализованный набор данных
        }
コード例 #2
0
 public void DecompressWhenTheParameterIsNullThrowsArgumentNullException()
 {
     _archiver.Decompress(null);
 }