Jump to content
Carlosgp

copiar pastas, sub pastas, e ficheiros | ftp - vb.net

Recommended Posts

Carlosgp

Olá pessoal, depois de emigrar e estar sem net um tempito, cá estou eu outra vez.

Consegui um emprego em França e a primeira coisa que o meu patrão me disse foi para fazer um programa de backup.

Só que agora o programa tem que fazer os backups via ftp, e é aqui que começa a grande confusão, pois consegui faze-lo a funcionar dentro do próprio PC e até por rede, mas estou com dificuldades a transferir via ftp devido a falta de conhecimentos e por ainda ser muito verdinho em programação.  :down:

Alguém me poderia encaminhar a algum sitio onde encontre informação pertinente ou algum código que me ajude a completar o programa, é que o que tenho encontrado e tudo a pagar  :wallbash: , e também já ficava aqui a informação para outros tantos que tem o mesmo problema que eu.

Não estou a pedir que façam o trabalho por mim mas sim que me ajudem a encontrar bases para o terminar.

já agora se alguém precisar posso disponibilizar o código que faz a copia de pastas e sub pastas dentro do computador, afinal, estamos aqui para compartilhar conhecimentos.

Desde já, muito obrigado a todos.

Carlos Pinheiro

Share this post


Link to post
Share on other sites
IvanDist

Boas experimenta o seguinte código, se tiveres dúvidas apita :)

Try
                    Dim strUsername As String = "username a usar"
                    Dim strPassword As String = "password a usar"

                    Dim netCredential As New Net.NetworkCredential
                    netCredential.UserName = strUsername
                    netCredential.Password = strPassword

                    Dim client As New Net.WebClient
                    client.Credentials = netCredential

                    client.UploadFile("ftp://ftp.exemplo.pt/backups/" & "nome com que queres guardar o ficheiro", "STOR", "caminho + nome do ficheiro para fazer upload")

                    netCredential = Nothing
                    client.Dispose()
                Catch ex As Exception
                    MsgBox("Erro ao enviar!", MsgBoxStyle.OkOnly, "FTP")
                End Try

Share this post


Link to post
Share on other sites
Carlosgp

Olá IvanDist, desde já agradeço muito a tua resposta. Quanto ao código, sim, ele funcionou, mas o meu problema esta em copiar as pastas e as subpastas com os respectivos ficheiros.

Eu vou colocar aqui o modulo que estou a usar para copiar desta mesma forma entre o computador...

Public Sub Copia_directorio(ByVal sourceDir As String, ByVal destDir As String, ByVal fRecursive As Boolean, ByVal overWrite As Boolean)
        estado = ""
        utilizacao = True
        PRINCIPAL.Label4.Refresh()
        ' ----------------------------------------

        Try


            Dim sDir As String
            Dim a As String
            Dim dDirInfo As IO.DirectoryInfo
            Dim sDirInfo As IO.DirectoryInfo
            Dim sFile As String
            Dim sFileInfo As IO.FileInfo
            Dim dFileInfo As IO.FileInfo
            BKU_p_man.lb_estado.Text = "A copiar"
            BKU_p_man.lb_estado.Refresh()
            ' Add trailing separators to the supplied paths if they don't exist.
            If Not sourceDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
                sourceDir &= System.IO.Path.DirectorySeparatorChar
            End If
            If Not destDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
                destDir &= System.IO.Path.DirectorySeparatorChar
            End If
            'SE O DESTINO DA DIRECTORIO NÃO EXISTIR, CRIA-LO !
            dDirInfo = New System.IO.DirectoryInfo(destDir)
            'xxx
            If dDirInfo.Exists = False Then dDirInfo.Create()
            dDirInfo = Nothing
            ' Recursive switch to continue drilling down into directory structure.
            If fRecursive Then
                ' Get a list of directories from the current parent.
                For Each sDir In System.IO.Directory.GetDirectories(sourceDir)
                    sDirInfo = New System.IO.DirectoryInfo(sDir)
                    dDirInfo = New System.IO.DirectoryInfo(destDir & sDirInfo.Name)
                    ' CRIA A DIRECTORIA SE ESTA NÃO EXISTIR
                    If dDirInfo.Exists = False Then dDirInfo.Create()
                    ' Since we are in recursive mode, copy the children also
                    Copia_directorio(sDirInfo.FullName, dDirInfo.FullName, fRecursive, overWrite)
                    sDirInfo = Nothing
                    dDirInfo = Nothing
                
                Next
            End If
            ' Get the files from the current parent.
            For Each sFile In System.IO.Directory.GetFiles(sourceDir)
                sFileInfo = New System.IO.FileInfo(sFile)
                dFileInfo = New System.IO.FileInfo(Replace(sFile, sourceDir, destDir))

                'SE O FICHEIRO NÃO EXISTIR, COPIA !

                If dFileInfo.Exists = False Then
                    sFileInfo.CopyTo(dFileInfo.FullName, overWrite)
                    file_on_copy = (dFileInfo.FullName) ' #################
                    BKU_p_man.lb_copy.Text = file_on_copy
                    BKU_p_man.lb_copy.Refresh()

                    writetxt("       " + file_on_copy)
                Else

                    'SE O FICHEIRO EXIRTIR E TIVER O MESMO TAMANH0 FAZ O SEGUINTE...............
                    'SE O FICHEIRO EXISTIR, TIVER O MESMO TAMANHO E overWrite = TRUE. COPIA !

                    If sFileInfo.Length = dFileInfo.Length And overWrite = True Then
                        sFileInfo.CopyTo(dFileInfo.FullName, overWrite)
                        file_on_copy = (dFileInfo.FullName) ' ################
                        BKU_p_man.lb_copy.Text = file_on_copy
                        BKU_p_man.lb_copy.Refresh()
                     
                        writetxt("       " + file_on_copy)
                        'SE O FICHEIRO EXISTIR, TIVER O MESMO TAMANHO E overWrite = FALSE. SAI !
                    ElseIf sFileInfo.Length = dFileInfo.Length And overWrite = False Then
                        Debug.WriteLine(sFileInfo.FullName & " Not copied.")
                    End If
                End If
                sFileInfo = Nothing
                dFileInfo = Nothing
            Next
        Catch ex As Exception
            MsgBox("Nao foi possivel efectuar a copia, certifique-se que existe espaço em disco ou que possui previlegios para efectuar a operaçao!")
            estado = "erro"
        End Try
        If estado <> "erro" Then
            utilizacao = False
            PRINCIPAL.Label4.Refresh()
            BKU_p_man.lb_estado.Text = ("Copia completa")
        Else
            utilizacao = False
            PRINCIPAL.Label4.Refresh()
            BKU_p_man.lb_estado.Text = ("Nao foi possivel concluir a copia!")
        End If
        PRINCIPAL.Label4.Refresh()

    End Sub

Este é o código que estou pensando altera-lo para que funcione em ftp mas ainda há muitas coisas que não sei fazer, por exemplo, tenho de verificar o tamanho do ficheiro que esta no ftp para se for diferente ele copiá-lo...

Obrigado

Carlos Pinheiro

Share this post


Link to post
Share on other sites
Carlosgp

Olá pessoal, visto haver poucas respostas em relação ao tópico (por ser um assunto um pouco complicado, penso eu!) estava pensando que se todos contribuir-mos com uma determinada parte daquilo que ajuda a trabalhar com o protocolo FTP, pode ser que se vá conseguir o que pretendo.

Pensei que se tentar-mos utilizar o código o mais simplificado possível, era bom para começar...

Então começo eu...

Copiar ficheiro para servidor ftp. (testei e funcionou)  :)

My.Computer.Network.UploadFile("ficheiro_local", "destino_ftp", "user", "pass")

Criar pasta no servidor ftp. (testei e funcionou)  :)   (só que tem muito código, se alguém arranjar mais simples...)

Public Sub MakeDir(ByVal dirName As String)

        FTPSettings.IP = "192.168.1.100/CARLOS"
        FTPSettings.UserID = "carlos"
        FTPSettings.Password = "qaz"
        Dim reqFTP As FtpWebRequest = Nothing
        Dim ftpStream As Stream = Nothing
        Try
            reqFTP = DirectCast(FtpWebRequest.Create(New Uri("ftp://" + FTPSettings.IP + "/" + dirName)), FtpWebRequest)
            reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory
            reqFTP.UseBinary = True
            reqFTP.Credentials = New NetworkCredential(FTPSettings.UserID, FTPSettings.Password)
            Dim response As FtpWebResponse = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
            ftpStream = response.GetResponseStream()
            ftpStream.Close()
            response.Close()
        Catch ex As Exception
            If ftpStream IsNot Nothing Then
                ftpStream.Close()
                ftpStream.Dispose()
            End If
            Throw New Exception(ex.Message.ToString())
        End Try
    End Sub

    Public NotInheritable Class FTPSettings
        Private Sub New()
        End Sub
        Public Shared Property IP() As String
            Get
                Return m_IP
            End Get
            Set(ByVal value As String)
                m_IP = value
            End Set
        End Property
        Private Shared m_IP As String
        Public Shared Property UserID() As String
            Get
                Return m_UserID
            End Get
            Set(ByVal value As String)
                m_UserID = value
            End Set
        End Property
        Private Shared m_UserID As String
        Public Shared Property Password() As String
            Get
                Return m_Password
            End Get
            Set(ByVal value As String)
                m_Password = value
            End Set
        End Property
        Private Shared m_Password As String
    End Class

Pessoal, não se esqueçam que isto não será útil só a mim. Para vocês e muita outra gente também. tenho procurado informação para fazer este trabalho e encontro muita coisa, mas tudo a pagar. Já esta na hora de dar a volta a esses gajos.

Se alguém souber como:

verificar existência de ficheiro.

verificar existência de pasta.

verificar o tamanho de um ficheiro.

que poste aqui por favor a ver se vou fazendo, pois acho que alguma coisa já vou conseguindo.

e por enquanto acho que e tudo...

Obrigado

Carlos Pinheiro...

Share this post


Link to post
Share on other sites
Carlosgp

Não sei porque mas ainda só houve uma pessoa a postar....  :)

No entanto sei que seria algo muito pratico para muita gente, eu, vocês e todos aqueles que procuram por soluções ftp.

Vamos lá pessoal, toca a postar....

cumps

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.