none
Progressbar com wpf e .zip RRS feed

  • Pergunta

  • Uso a dll Ionic.zip e nela unzipo e rezipo alguns arquivos e pastas. O meu gestor me pediu para que eu colocasse uma progressbar e estou com dúvida em como fazê-lo usando WPF. Abaixo o código do zip. É muito rápido e não sei se vale a pena, tentei explicar isso a ele, mas não convenci. Então terei que fazê-lo: Pode ser um loading, qualquer coisa que mostre que a aplicação não está parada.

    private void CriarZip()
            {
                string path_destino = caminho_original + @"\Destino"; 
                string path_files = caminho_original + @"\Destino\Temp";           
    
                List<string> _filesDiretory = new List<string>();
    
                string nome_arquivo = nome_arquivo_zip + "_FarmExterna.zip";
    
                if (!nome_arquivo.Contains(".zip"))
                {
                    MessageBox.Show("O nome do arquivo deve possuir a extensão .zip");
                    return;
                }
    
                try
                {
                    string[] files_new = Directory.GetFiles(path_files, "*", SearchOption.AllDirectories);
                    string[] folder_new = Directory.GetDirectories(path_files, "*", SearchOption.AllDirectories);
    
                    CriaPastaFarmInterna();
                    CriaPastaFarmExterna();
    
                    //Deleto os arquivo que não estão na Farm Externa
                    foreach (var file in files_new)
                    {
                        string t = string.Empty;
                        int pos = file.IndexOf(dirInicio);
    
                        if (pos > 0)
                        {
                            t = file.ToString().Substring(pos, file.Length - pos);
    
                            bool bListaArquivo = (from b in listaArquivosForaFarmExterna
                                                  where b.Contains(t)
                                                  select b).Count() > 0 ? true : false;
                            if (bListaArquivo)
                                File.Delete(file);
                        }
                        else
                        {
                            t = Path.GetFileName(file);
                            arquivos.Add(t);
                        }  
    
                    }
    
                    LimpaPastaWeb();
                    DeletaPastaFarmExterna();
    
                    //Adiciono arquivos que estão dentro da pasta base apenas
                    foreach (var file in Directory.GetFiles(path_files))                    
                    {
                        arquivos.Add(file);
                    }
    
                    //Aqui pego as pastas com arquivos que serão zipadas
                    foreach (var file in Directory.GetDirectories(path_files))
                    {
                        arquivos.Add(file);
                    }
    
                    string localNomeDestinoZIP = path_destino + "\\" + nome_arquivo;
    
                    if (arquivos.Count() > 0)
                    {
    
                        processaDiretorio(path_files);
                        ZipUnzip.CriarArquivoZip(arquivos, localNomeDestinoZIP);
                        MessageBox.Show("Os arquivos selecionados foram compactados na pasta \n\n " +
                                  localNomeDestinoZIP);
                    }
                    else
                        MessageBox.Show("Não há a pasta para ser compactada.");                
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ocorreu um erro ao criar arquivo ZIP \n\n " + ex.Message);
    
                }
                finally
                {
                    DeletarPastaTrabalho(path_files);
                    Application.Current.Shutdown();
                }
            }


    • Editado pnet quinta-feira, 17 de março de 2016 18:26
    quinta-feira, 17 de março de 2016 17:51

Todas as Respostas

  • Boa noite.

    Tu podes utilizar um BackgroundWorker (basicamente como se fosse uma nova Thread ou uma Task).

    Ao iniciar o código do DoWork(), tu podes mostrar a animação de "loading" e ao completar o trabalho, esconde-la.

    AQUI tem um exemplo de como utilizar (possivelmente no teu caso tu possas fazer de uma forma mais simplificada).


    Att., Rafael Simor

    sábado, 19 de março de 2016 00:17