示例#1
0
        /// <summary>
        /// Получить относительные пути конфигурации, соответствующие заданным частям
        /// </summary>
        private List <RelPath> GetConfigPaths(ConfigParts configParts)
        {
            List <RelPath> configPaths = new List <RelPath>();

            if (configParts.HasFlag(ConfigParts.Base))
            {
                configPaths.Add(new RelPath(ConfigParts.Base, AppFolder.Root));
            }

            if (configParts.HasFlag(ConfigParts.Interface))
            {
                configPaths.Add(new RelPath(ConfigParts.Interface, AppFolder.Root));
            }

            if (configParts.HasFlag(ConfigParts.Server))
            {
                configPaths.Add(new RelPath(ConfigParts.Server, AppFolder.Config));
            }

            if (configParts.HasFlag(ConfigParts.Comm))
            {
                configPaths.Add(new RelPath(ConfigParts.Comm, AppFolder.Config));
            }

            if (configParts.HasFlag(ConfigParts.Web))
            {
                configPaths.Add(new RelPath(ConfigParts.Web, AppFolder.Config));
                configPaths.Add(new RelPath(ConfigParts.Web, AppFolder.Storage));
            }

            return(configPaths);
        }
示例#2
0
        /// <summary>
        /// Распаковать архив конфигурации
        /// </summary>
        public bool UnpackConfig(string srcFileName, ConfigOptions configOptions)
        {
            try
            {
                // удаление существующей конфигурации
                List <RelPath> configPaths = GetConfigPaths(configOptions.ConfigParts);
                PathDict       pathDict    = PrepareIgnoredPaths(configOptions.IgnoredPaths);

                foreach (RelPath relPath in configPaths)
                {
                    ClearDir(relPath, pathDict);
                }

                // определение допустимых директорий для распаковки
                ConfigParts   configParts    = configOptions.ConfigParts;
                List <string> allowedEntries = new List <string>(AllConfigParts.Length);

                foreach (ConfigParts configPart in AllConfigParts)
                {
                    if (configParts.HasFlag(configPart))
                    {
                        allowedEntries.Add(DirectoryBuilder.GetDirectory(configPart, '/'));
                    }
                }

                // распаковка новой конфигурации
                using (FileStream fileStream =
                           new FileStream(srcFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    using (ZipArchive zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Read))
                    {
                        string instanceDir = Settings.Directory;

                        foreach (ZipArchiveEntry entry in zipArchive.Entries)
                        {
                            if (StartsWith(entry.FullName, allowedEntries, StringComparison.Ordinal))
                            {
                                string relPath      = entry.FullName.Replace('/', Path.DirectorySeparatorChar);
                                string destFileName = instanceDir + relPath;
                                Directory.CreateDirectory(Path.GetDirectoryName(destFileName));
                                entry.ExtractToFile(destFileName, true);
                            }
                        }

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при распаковке конфигурации из архива" :
                                   "Error unpacking configuration from archive");
                return(false);
            }
        }
示例#3
0
        /// <summary>
        /// Распаковать архив конфигурации
        /// </summary>
        public bool UnpackConfig(string srcFileName, ConfigOptions configOptions)
        {
            try
            {
                // delete the existing configuration
                List <RelPath> configPaths = GetConfigPaths(configOptions.ConfigParts);
                PathDict       pathDict    = PrepareIgnoredPaths(configOptions.IgnoredPaths);

                foreach (RelPath relPath in configPaths)
                {
                    ClearDir(relPath, pathDict);
                }

                // delete a project information file
                string instanceDir         = Settings.Directory;
                string projectInfoFileName = Path.Combine(instanceDir, ProjectInfoEntryName);
                File.Delete(projectInfoFileName);

                // define allowed directories to unpack
                ConfigParts   configParts    = configOptions.ConfigParts;
                List <string> allowedEntries = new List <string> {
                    ProjectInfoEntryName
                };

                foreach (ConfigParts configPart in AllConfigParts)
                {
                    if (configParts.HasFlag(configPart))
                    {
                        allowedEntries.Add(DirectoryBuilder.GetDirectory(configPart, '/'));
                    }
                }

                // unpack the new configuration
                using (FileStream fileStream =
                           new FileStream(srcFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    using (ZipArchive zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Read))
                    {
                        foreach (ZipArchiveEntry entry in zipArchive.Entries)
                        {
                            if (StartsWith(entry.FullName, allowedEntries, StringComparison.Ordinal))
                            {
                                string relPath      = entry.FullName.Replace('/', Path.DirectorySeparatorChar);
                                string destFileName = instanceDir + relPath;
                                Directory.CreateDirectory(Path.GetDirectoryName(destFileName));
                                entry.ExtractToFile(destFileName, true);
                            }
                        }

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при распаковке конфигурации из архива" :
                                   "Error unpacking configuration from archive");
                return(false);
            }
        }