コード例 #1
0
ファイル: PacoteArquivosMesa.cs プロジェクト: ertprs/Estudo
        /// <summary>
        /// Compacta os arquivos gerados.
        /// </summary>
        /// <param name="outputStream"></param>
        public void Compactar(System.IO.Stream outputStream)
        {
            // Adiciona os arquivos FML
            using (var zip = new Ionic.Utils.Zip.ZipFile(outputStream))
            {
                var errosGeracaoMarcacao = string.Empty;
                var buffer = new byte[1024];
                var read   = 0;

                for (var i = 0; i < _arquivos.Count; i++)
                {
                    // Verifica se o arquivo é um zip ou seja um arquivo GLO
                    if (Glass.Arquivos.VerificarArquivoZip(_arquivos[i]))
                    {
                        // Descompacta o arquivo zip
                        using (var ms = new System.IO.MemoryStream(_arquivos[i]))
                        {
                            var zip2 = new CalcEngine.Compression.ZipArchive(ms, System.IO.FileAccess.Read);
                            foreach (var file in zip2.Files)
                            {
                                using (var stream2 = file.OpenRead())
                                {
                                    var ms2 = new System.IO.MemoryStream((int)file.Length);

                                    while ((read = stream2.Read(buffer, 0, buffer.Length)) > 0)
                                    {
                                        ms2.Write(buffer, 0, read);
                                    }

                                    var fileName  = System.IO.Path.GetFileNameWithoutExtension(_nomes[i]);
                                    var directory = System.IO.Path.GetDirectoryName(file.Name);

                                    zip.AddFileStream(fileName + System.IO.Path.GetExtension(file.Name), directory, ms2);
                                }
                            }
                        }
                    }
                    else
                    {
                        zip.AddFileStream(_nomes[i].Replace("  ", "").Replace(" ", ""), "", new System.IO.MemoryStream(_arquivos[i]));
                    }
                }

                // Verifica se existe algum erro tratado no momento da geração do arquivo.
                if (_erros != null && _erros.Any(f => f.Value != null))
                {
                    // Monta um texto com todos os problemas ocorridos ao gerar o arquivo de mesa, ao final do método, o texto é salvo em um arquivo separado e é zipado junto com o ASC.
                    errosGeracaoMarcacao = string.Format("Situações com arquivos de mesa: </br></br>{0}",
                                                         string.Join("</br>", _erros.Where(f => f.Value != null).Select(f => string.Format("Etiqueta: {0} Erro: {1}.", f.Key, MensagemAlerta.FormatErrorMsg(null, f.Value)))));

                    zip.AddStringAsFile(errosGeracaoMarcacao, "Situações com arquivos de mesa.error", string.Empty);
                }

                zip.Save();
            }
        }
コード例 #2
0
ファイル: PacoteArquivosMesa.cs プロジェクト: ertprs/Estudo
        /// <summary>
        /// Salva os arquivos no diretório informado
        /// </summary>
        /// <param name="diretorio"></param>
        public void SalvarArquivos(string diretorio)
        {
            var buffer = new byte[1024];
            var read   = 0;
            var errosGeracaoMarcacao = string.Empty;

            for (var i = 0; i < _arquivos.Count; i++)
            {
                // Verifica se o arquivo é um zip ou seja um arquivo GLO
                if (Glass.Arquivos.VerificarArquivoZip(_arquivos[i]))
                {
                    // Descompacta o arquivo zip
                    using (var ms = new System.IO.MemoryStream(_arquivos[i]))
                    {
                        var zip2 = new CalcEngine.Compression.ZipArchive(ms, System.IO.FileAccess.Read);
                        foreach (var file in zip2.Files)
                        {
                            using (var stream2 = file.OpenRead())
                            {
                                var fileName = System.IO.Path.GetFileNameWithoutExtension(_nomes[i]);

                                var ms2 = System.IO.File.Create(System.IO.Path.Combine(diretorio, fileName + System.IO.Path.GetExtension(file.Name)));

                                while ((read = stream2.Read(buffer, 0, buffer.Length)) > 0)
                                {
                                    ms2.Write(buffer, 0, read);
                                }
                                if (!System.IO.File.Exists(System.IO.Path.Combine(diretorio, (fileName + System.IO.Path.GetExtension(file.Name)).Replace("  ", "").Replace(" ", ""))))
                                {
                                    throw new Exception($"Falha ao salvar o arquivo : {_nomes[i]} na pasta {diretorio}.");
                                }
                            }
                        }
                    }
                }
                else
                {
                    System.IO.File.WriteAllBytes(System.IO.Path.Combine(diretorio, _nomes[i].Replace("  ", "").Replace(" ", "")), _arquivos[i]);

                    if (!System.IO.File.Exists(System.IO.Path.Combine(diretorio, _nomes[i].Replace("  ", "").Replace(" ", ""))))
                    {
                        throw new Exception($"Falha ao salvar o arquivo : {_nomes[i]} na pasta {diretorio}.");
                    }
                }
            }

            // Verifica se existe algum erro tratado no momento da geração do arquivo.
            if (_erros != null && _erros.Any(f => f.Value != null))
            {
                // Monta um texto com todos os problemas ocorridos ao gerar o arquivo de mesa, ao final do método, o texto é salvo em um arquivo separado e é zipado junto com o ASC.
                errosGeracaoMarcacao = string.Format("Situações com arquivos de mesa: </br></br>{0}",
                                                     string.Join("</br>", _erros.Where(f => f.Value != null).Select(f => string.Format("Etiqueta: {0} Erro: {1}.", f.Key, MensagemAlerta.FormatErrorMsg(null, f.Value)))));

                System.IO.File.WriteAllText(System.IO.Path.Combine(diretorio, "Situações com arquivos de mesa.error"), errosGeracaoMarcacao);
            }
        }