Ir para conteúdo
Fórum Script Brasil
  • 0

auto atualização via ftp


cwarez

Pergunta

pessoal, tenho este código abaixo que é o UPDATE do meu programa

ele lista os arquivos do ftp e copia para a maquina.

só que o problema é q ele copia tambem as subpastas, e isso faz com que a atualização de erro.

por favor, alguém me da uma ideia de como alterar o codigo para que ele não copie as subpastas, copiar somente os arquivos da raiz.

obrigado

segue o codigo:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'return a simple list of filenames in directory



        Timer1.Stop()

        Try
            ProgressBar1.Value = 25
            Dim buffer(20000000) As Byte
            Dim read As Integer = 0
            Dim i As Integer
            Dim FileNames As String
            Dim Aux As String
            Dim ftp As FtpWebRequest = CType(FtpWebRequest.Create("ftp://SSA-RS-ACF01/"), FtpWebRequest)

            'CaminhoAplicacao.Text = Application.ExecutablePath.Replace("SGR_Update.EXE", "")
            CaminhoAplicacao.Text = Application.ExecutablePath.Remove(Application.ExecutablePath.Length - 14, 14)
            'CaminhoAplicacao.Text = "C:\DADOS\Teste\"

            '' read de files at ftp folder

            ftp.Method = Net.WebRequestMethods.Ftp.ListDirectory
            Dim sr As New StreamReader(ftp.GetResponse.GetResponseStream())
            FileNames = sr.ReadToEnd()

            FTPFiles.Text = "Arquivos encontrados ..." & vbCrLf & FileNames
            Me.Update()

            FileNames = FileNames.Replace(vbCrLf, "|")

            FTPFiles.Text = FTPFiles.Text & vbCrLf & vbCrLf & "Copiando arquivos..." & vbCrLf

            ftp = Nothing

            StatusUpdate.Text = "Baixando arquivos."
            Me.Update()

            For i = 0 To FileNames.Split("|").Count - 2
                FTPFiles.Text = FTPFiles.Text & vbCrLf & FileNames.Split("|")(i)
                Aux = CaminhoAplicacao.Text & FileNames.Split("|")(i)


                ProgressBar1.Value = i * 100 / (FileNames.Split("|").Count - 2)

                Dim targetFI = New FileInfo(Aux)

                Dim ftp2 As FtpWebRequest = CType(FtpWebRequest.Create("ftp://SSA-RS-ACF01/SGR/" & FileNames.Split("|")(i)), FtpWebRequest)
                ftp2.Method = Net.WebRequestMethods.Ftp.DownloadFile
                ftp2.UseBinary = True


                Using response As FtpWebResponse = CType(ftp2.GetResponse, FtpWebResponse)

                    Using responseStream As Stream = response.GetResponseStream
                        Using fs As FileStream = targetFI.OpenWrite
                            'Try
                            Do
                                read = responseStream.Read(buffer, 0, buffer.Length)
                                fs.Write(buffer, 0, read)
                            Loop Until read = 0
                            responseStream.Close()
                            fs.Flush()
                            fs.Close()
                            'Catch ex As Exception
                            '    'catch error and delete file only partially downloaded
                            '    fs.Close()
                            '    'delete target file as it's incomplete
                            '    targetFI.Delete()
                            '    Throw
                            'End Try
                        End Using
                        responseStream.Close()
                    End Using
                    response.Close()
                End Using

        FTPFiles.Text = FTPFiles.Text & vbCrLf & targetFI.ToString()
        Me.Update()
        'targetFI = Nothing
            Next

        StatusUpdate.Text = "Atualização concluída."

        Timer2.Interval = 5000
        Timer2.Start()

        Catch ex As Exception
            If MsgBox("Não foi possível atualizar a versão do SGR. Deseja continuar com a versão antiga?", MsgBoxStyle.YesNo, "Erro") = MsgBoxResult.Yes Then
                Process.Start(CaminhoAplicacao.Text & "SGR.EXE")
            End If
            Me.Close()
        End Try

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Cara, seu código tá da mesma forma (basicamente) que uso nesse tipo de situação. Contudo, eu coloco todos os arquivos em uma pasta final, ou seja, sem outros diretórios nesta pasta.

O que você pode fazer é testar se existe uma extensão na sua variável FileNames, quando você está declarando a ftp2. Antes de declarar a variável, verifique se FileNames.Split("|")(i) tem uma extensão.

Outra forma é criar um passo antes de declarar a ftp2, como o exemplo abaixo:

Dim request As FtpWebRequest = WebRequest.Create("ftp://SSA-RS-ACF01/SGR/" & FileNames.Split("|")(i))
 request.Credentials = New NetworkCredential("username", "password")
 request.Method = WebRequestMethods.Ftp.GetFileSize

 Dim response As FtpWebResponse = request.GetResponse()

Só precisa testar se no caso de pasta, ele irá trazer o tamanho total da pasta, o que torna esse código inviável.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...