Array
(
)

Erro intermitente em download por FTP feito em c#

Vagner Santos
   - 09 set 2011

Olá a todos.

Estou com um sério problema e não sei mais o que fazer, gostaria muito que alguém me ajudasse.

Criei o programa que baixa arquivos via FTP e que a princípio funciona certinho, no entanto, muitas vezes o processo de download é interrompido dizendo que não foi possivel realizar o download do arquivo.

Mas isso acontece as vezes, é intermitente mesmo, outras vezes baixa normal.

Alguem sabe porque isso acontece ou tem uma forma diferente de fazer o Download do arquivo?

Agradeço muito qualquer ajuda desde já !

Segue abaixo minha função

        public bool Download(string ftpOrigem, string nomeArquivo, string destinoDoArquivo)
        {
            bool retorno = false;
            Uri uri = new Uri(ftpOrigem + "/" + nomeArquivo);

            // Cria o FtpWebRequest com o Uri que montamos    
            FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(uri);

            // Faz a autenticação do FTP
            request.Credentials = new NetworkCredential("admsite", "design10");

            // Por padrão a conexão é mantida depois do comando ser executado, aqui alteramos para a conexão ser fechada.    
            request.KeepAlive = false;
            // Especifica o comando para ser executado.    
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            // Utiliza conexão no modo passivo    
            request.UsePassive = true;
            // Especifica o tipo de transferência de dados.    
            request.UseBinary = true;
            try
            {
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                FileStream fileStream = new FileStream(Path.Combine(destinoDoArquivo, nomeArquivo), FileMode.Create);

                // Divide e baixa o arquivo por partes.        
                int Length = 256;
                Byte[] buffer = new Byte[Length];
                int bytesToSave = responseStream.Read(buffer, 0, Length);


                while (bytesToSave > 0)
                {
                    // Transfere o conteúdo do buffer para o arquivo            
                    fileStream.Write(buffer, 0, bytesToSave);

                    // Baixa uma parte do arquivo e carrega o buffer            
                    bytesToSave = responseStream.Read(buffer, 0, Length);
                }


                fileStream.Close();
                response.Close();

                retorno = true;
            }
            catch (Exception ex)
            {
                
                 MessageBox.Show("Houve um erro ao tentar baixar o arquivo de atualização \n\n " + ex.Message);
                  retorno = false;
              
            }
            return retorno;          
        }