Jump to content
Fórum Script Brasil
  • 0

auto atualização via ftp


cwarez

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...