Jump to content

Apagar ficheiro em FTP com data de criação x dias, download de ficheiro e sua descompactar


gastao

Recommended Posts

Boas alguém me consegue ajudar como a apagar dados de um FTP de um tipo por exemplo *.zip com uma data por exemplo superior a 5 dias.

Outro ponto também preciso de fazer download de um ficheiro mas isso eu penso que seja fácil fazer e a enciclopedia google deve ter alguns exemplos, mas queria descompacta lo por exemplo e msm substituindo ficheiros se eles forem iguais

Link to comment
Share on other sites

  • 6 months later...

  tou a colocar o seguinte codigo e nao me apaga nada no ftp alguem me consegue dar uma ajuda sff

   Dim FTPRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://127.0.0.1/*.zip"), System.Net.FtpWebRequest)
   FTPRequest.Credentials = New System.Net.NetworkCredential("username", "password")
   FTPRequest.Method = System.Net.WebRequestMethods.Ftp.DeleteFile
Link to comment
Share on other sites

Boa noite,

Creio que por esse caminho não seja assim tão fácil de conseguir. Cheguei a experimentar e optei por comprar um componente para o fazer, para não estar a perder tempo a escrever um cliente FTP para executar comandos FTP no servidor.

De qualquer das formas fica aqui um exemplo de um cliente FTP:

'Baseado em codigo de um livro'
Imports System.Net.Sockets

Private Function enviaCommando (_
  ipAddress As String, ipPort As Integer, _
  ftpUser As String, ftpPassword As String, _
  CommandoDeFTP as String) As Boolean

  enviaCommando = False
  
  Try
    Dim tcpClient As New TcpClient()
    tcpClient.Connect(ipAddress, ipPort)
    Flush(tcpClient) 'limpa a porcaria do welcome do servidor'

    Dim response As String = transmiteCommando(tcpClient, "utilizador " & ftpUser)
    If response.IndexOf("331") >= 0 Then
      response = transmiteCommando(tcpClient, "password " & ftpPassword)
      If response.IndexOf("230") >= 0 Then
        response = transmiteCommando(tcpClient, CommandoDeFTP)
        If response.IndexOf("200") >= 0 Then
          enviaCommando = True
        End If
      End If
    End If
    tcpClient.Close()

  Catch ex As Exception
    MsgBox("Erro: " & ex.Message)
  End Try

End Function
  
Private Function transmiteCommando(ByVal tcpClient As TcpClient, ByVal cmd As String) As String

  transmiteCommando = ""
  Try
    Dim networkStream As System.Net.Sockets.NetworkStream = tcpClient.GetStream()
    If networkStream.CanWrite And networkStream.CanRead Then
      Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(cmd & vbCrLf)
      networkStream.Write(sendBytes, 0, sendBytes.Length)
      Dim oReader As New System.IO.StreamReader(networkStream)
      transmiteCommando = oReader.ReadLine()
    End If
  Catch ex As Exception
    MsgBox("Erro: " & ex.Message)
  End Try

End Function

Private Sub Flush(ByVal tcpClient As TcpClient) 

  Try

    Dim networkStream As System.Net.Sockets.NetworkStream = tcpClient.GetStream()
    If networkStream.CanWrite And networkStream.CanRead Then
      Dim recvBytes(tcpClient.ReceiveBufferSize) As Byte
      networkStream.ReadTimeout = 10000
      networkStream.Read(recvBytes, 0, CInt(tcpClient.ReceiveBufferSize))
      Dim returnData As String = System.Text.Encoding.ASCII.GetString(recvBytes)
    End If

  Catch ex As Exception

  End Try

End Sub

private sub apagaZips()
	Try
		enviaCommando ("127.0.0.1", 20, "utilizador", "password", "rm -rf *.zip")
	Catch ex As Exeption
End Sub

Cordiais cumprimentos,

Apocsantos

  • Vote 1

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

8 horas atrás, apocsantos disse:

 

Boa noite,

Creio que por esse caminho não seja assim tão fácil de conseguir. Cheguei a experimentar e optei por comprar um componente para o fazer, para não estar a perder tempo a escrever um cliente FTP para executar comandos FTP no servidor.

De qualquer das formas fica aqui um exemplo de um cliente FTP:


'Baseado em codigo de um livro'
Imports System.Net.Sockets

Private Function enviaCommando (_
  ipAddress As String, ipPort As Integer, _
  ftpUser As String, ftpPassword As String, _
  CommandoDeFTP as String) As Boolean

  enviaCommando = False
  
  Try
    Dim tcpClient As New TcpClient()
    tcpClient.Connect(ipAddress, ipPort)
    Flush(tcpClient) 'limpa a porcaria do welcome do servidor'

    Dim response As String = transmiteCommando(tcpClient, "utilizador " & ftpUser)
    If response.IndexOf("331") >= 0 Then
      response = transmiteCommando(tcpClient, "password " & ftpPassword)
      If response.IndexOf("230") >= 0 Then
        response = transmiteCommando(tcpClient, CommandoDeFTP)
        If response.IndexOf("200") >= 0 Then
          enviaCommando = True
        End If
      End If
    End If
    tcpClient.Close()

  Catch ex As Exception
    MsgBox("Erro: " & ex.Message)
  End Try

End Function
  
Private Function transmiteCommando(ByVal tcpClient As TcpClient, ByVal cmd As String) As String

  transmiteCommando = ""
  Try
    Dim networkStream As System.Net.Sockets.NetworkStream = tcpClient.GetStream()
    If networkStream.CanWrite And networkStream.CanRead Then
      Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(cmd & vbCrLf)
      networkStream.Write(sendBytes, 0, sendBytes.Length)
      Dim oReader As New System.IO.StreamReader(networkStream)
      transmiteCommando = oReader.ReadLine()
    End If
  Catch ex As Exception
    MsgBox("Erro: " & ex.Message)
  End Try

End Function

Private Sub Flush(ByVal tcpClient As TcpClient) 

  Try

    Dim networkStream As System.Net.Sockets.NetworkStream = tcpClient.GetStream()
    If networkStream.CanWrite And networkStream.CanRead Then
      Dim recvBytes(tcpClient.ReceiveBufferSize) As Byte
      networkStream.ReadTimeout = 10000
      networkStream.Read(recvBytes, 0, CInt(tcpClient.ReceiveBufferSize))
      Dim returnData As String = System.Text.Encoding.ASCII.GetString(recvBytes)
    End If

  Catch ex As Exception

  End Try

End Sub

private sub apagaZips()
	Try
		enviaCommando ("127.0.0.1", 20, "utilizador", "password", "rm -rf *.zip")
	Catch ex As Exeption
End Sub

Cordiais cumprimentos,

Apocsantos

 

eu para enviar para o ftp fiz algo muito simples que até esta a funcionar

 

 'Fazer upload para o FTP do ficheiro desejado
            Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://" & nameftp & "/" + Date.Today.ToLongDateString + " file.zip"), System.Net.FtpWebRequest)
            request.Credentials = New System.Net.NetworkCredential("" & userftp & "", "" & passwordftp & "")
            request.Method = System.Net.WebRequestMethods.Ftp.UploadFile
            Dim file() As Byte = System.IO.File.ReadAllBytes("" & caminho & "\" + Date.Today.ToLongDateString + " file.zip")
            Dim strz As System.IO.Stream = request.GetRequestStream()
            strz.Write(file, 0, file.Length)
            strz.Close()
            strz.Dispose()
            AutoCloseMsgBox("Ficheiro enviado para o FTP", "teste", 5)
Edited by gastao
Link to comment
Share on other sites

Bom dia,

Para fazer upload, sim também tinha seguido esse caminho, mas para remover ficheiros, por exemplo, não fica assim tão simples. De qualquer das formas as rotinas criadas dão para todos os comandos possíveis num FTP, uma vez que é um FTP client.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
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.