none
Sistema para ATUALIZAR aplicativo (?) Ajuda! RRS feed

  • Pergunta

  • Boa noite,

    Preciso criar um sistema para atualizar um aplicativo, abaixo explicarei exatamente o que eu preciso fazer;

    Preciso acessar um (FTP), baixar um arquivo .rar, extrair os arquivos, copiar e mandar substituir por outros em determinada pasta, estou com muita dúvida pra realizar esse procedimento. 

    - Baixar arquivo.rar /FTP;

    - Extrair arquivo.rar;

    - Copiar arquivos extraídos e mandar substituir na determinada pasta. 

    Obs: Preciso que substitua os arquivos e se possível cria uma pasta com a data e hora, e faça uma cópia de todos arquivos substituídos.

    (*O arquivo zipado, possui arquivos soltos e uma subpasta*).

    Obrigado pessoal!

    segunda-feira, 11 de julho de 2016 01:07

Respostas

  • Boa dia Estudante_CSharp, tudo bem?

    Este é um exemplo de código em C# para baixar um arquivo do FTP. Será necessário adaptá-lo a sua necessidade:

    using System.Net;
    using System.IO;
        
    String RemoteFtpPath = "ftp://ftp.csidata.com:21/Futures.20150305.gz";
    String LocalDestinationPath = "Futures.20150305.gz";
    String Username="yourusername";
    String Password = "yourpassword";
    Boolean UseBinary = true; // use true for .zip file or false for a text file
    Boolean UsePassive = false;
     
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(RemoteFtpPath);
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    request.KeepAlive = true;
    request.UsePassive = UsePassive;
    request.UseBinary = UseBinary;
     
    request.Credentials = new NetworkCredential(Username, Password);
     
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
     
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);
     
    using (FileStream writer = new FileStream(LocalDestinationPath, FileMode.Create))
    {
     
        long length = response.ContentLength;
        int bufferSize = 2048;
        int readCount;
        byte[] buffer = new byte[2048];
     
        readCount = responseStream.Read(buffer, 0, bufferSize);
        while (readCount > 0)
        {
            writer.Write(buffer, 0, readCount);
            readCount = responseStream.Read(buffer, 0, bufferSize);
        }
    }
     
    reader.Close();
    response.Close();
    

    Para descompactar o arquivo, você pode usar o seguite código como exemplo:

    using System;
    using System.IO;
    
    namespace ConsoleApplication
    {
      class Program
      {
        static void Main(string[] args)
        {
          string startPath = @"c:\example\start";
          string zipPath = @"c:\example\result.zip";
          string extractPath = @"c:\example\extract";
    
          System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath);
          System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
      }
    }

    O código abaixo conta o número de arquivos que começam com uma letra específica. Você pode altera-lo para buscar os arquivos com as datas mais recentes:

    using System;
    using System.IO;
    
    class Test 
    {
        public static void Main() 
        {
            try 
            {
                // Only get files that begin with the letter "c."
                string[] dirs = Directory.GetFiles(@"c:\", "c*");
                Console.WriteLine("The number of files starting with c is {0}.", dirs.Length);
                foreach (string dir in dirs) 
                {
                    Console.WriteLine(dir);
                }
            } 
            catch (Exception e) 
            {
                Console.WriteLine("The process failed: {0}", e.ToString());
            }
        }
    }

    Por gentileza, tente adapta-los e faça o teste.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 14 de julho de 2016 14:24
    Moderador

Todas as Respostas

  • não entendi muito bem...

    sua duvida seria???

    segunda-feira, 11 de julho de 2016 02:32
  • Boa tarde amigo,

    Resumindo, preciso baixar um arquivo .rar de um servidor /FTP/, após realizar o download, extrair o conteúdo e mover para uma pasta, se os arquivos já existirem, mandar substituir e criar uma pasta /backuparquivos. Basicamente preciso fazer esse procedimento.

    Att,

    segunda-feira, 11 de julho de 2016 17:33
  • Cara, 

    Usa o WebClient para baixar o arquivo...

    Usa o IONIC para descompactar em uma pastas "Temp"

    Percorra todos os arquivos novos e procure um a um na lista de arquivos atuais....

    Caso encontrado, copie-os para a pasta criada previamente no padrão que você estabeleceu e ALTERE O NOME DO ARQUIVO ORIGINAL, por exemplo aplicativo.exe para aplicativo.exe.old...

    É interessante renomear pois se estiver em uso (e vai estar) o sistema não vai substituir aí já era sua atualização toda... 

    Enfim, coloque na rotina de inicialização um procedimento para apagar os arquivos .old.....

    Sem segredos... tem outras formas, mas assim funciona... tranquilo e fácil.

    segunda-feira, 11 de julho de 2016 17:54
  • Ives, pode me ajudar em código? Preciso de uma luz pra fazer esse projeto amigo, e é muito importante que eu consiga! Se tiver disponibilidade de me passar um código fonte pra eu modificar e conseguir fazer funcionar esse projeto?

    Obrigado desde já, boa tarde.

    segunda-feira, 11 de julho de 2016 18:19
  • Colega, o truque é assim que baixar o arquivo com a extensao .new criar um .bat, faça a chamada do .bat e abandone o executavel original, no .bat voce renomeia o .exe para .old,  o .new para .exe e depois chama novamente o .exe e apaga o .bat,

    pronto seu sistema estará atualizado


    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br
    segunda-feira, 11 de julho de 2016 18:28
  • O quê eu preciso é um pouco mais complexo amigo, mas obrigado pela resposta!

    Att,

    segunda-feira, 11 de julho de 2016 18:34
  • Boa tarde Estudante_CSharp,

    Obrigado por sua participação. A resposta de Ives F. Bertoli é o que você precisa, mas em código? Seria isso?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 12 de julho de 2016 17:50
    Moderador
  • Bom dia, 

    Exatamente isso amigo! 

    Fiz um projeto pra minha empresa, e essa questão é a última questão que preciso para finalizar o projeto e entregar! Abraço!

    quinta-feira, 14 de julho de 2016 11:33
  • Boa dia Estudante_CSharp, tudo bem?

    Este é um exemplo de código em C# para baixar um arquivo do FTP. Será necessário adaptá-lo a sua necessidade:

    using System.Net;
    using System.IO;
        
    String RemoteFtpPath = "ftp://ftp.csidata.com:21/Futures.20150305.gz";
    String LocalDestinationPath = "Futures.20150305.gz";
    String Username="yourusername";
    String Password = "yourpassword";
    Boolean UseBinary = true; // use true for .zip file or false for a text file
    Boolean UsePassive = false;
     
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(RemoteFtpPath);
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    request.KeepAlive = true;
    request.UsePassive = UsePassive;
    request.UseBinary = UseBinary;
     
    request.Credentials = new NetworkCredential(Username, Password);
     
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
     
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);
     
    using (FileStream writer = new FileStream(LocalDestinationPath, FileMode.Create))
    {
     
        long length = response.ContentLength;
        int bufferSize = 2048;
        int readCount;
        byte[] buffer = new byte[2048];
     
        readCount = responseStream.Read(buffer, 0, bufferSize);
        while (readCount > 0)
        {
            writer.Write(buffer, 0, readCount);
            readCount = responseStream.Read(buffer, 0, bufferSize);
        }
    }
     
    reader.Close();
    response.Close();
    

    Para descompactar o arquivo, você pode usar o seguite código como exemplo:

    using System;
    using System.IO;
    
    namespace ConsoleApplication
    {
      class Program
      {
        static void Main(string[] args)
        {
          string startPath = @"c:\example\start";
          string zipPath = @"c:\example\result.zip";
          string extractPath = @"c:\example\extract";
    
          System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath);
          System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
      }
    }

    O código abaixo conta o número de arquivos que começam com uma letra específica. Você pode altera-lo para buscar os arquivos com as datas mais recentes:

    using System;
    using System.IO;
    
    class Test 
    {
        public static void Main() 
        {
            try 
            {
                // Only get files that begin with the letter "c."
                string[] dirs = Directory.GetFiles(@"c:\", "c*");
                Console.WriteLine("The number of files starting with c is {0}.", dirs.Length);
                foreach (string dir in dirs) 
                {
                    Console.WriteLine(dir);
                }
            } 
            catch (Exception e) 
            {
                Console.WriteLine("The process failed: {0}", e.ToString());
            }
        }
    }

    Por gentileza, tente adapta-los e faça o teste.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 14 de julho de 2016 14:24
    Moderador
  • Estou precisando exatamente isso também para o meu projeto, você conseguiu algo?
    quinta-feira, 14 de julho de 2016 19:44