Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

gastao

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

Mensagens Recomendadas

gastao    0
gastao

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gastao    0
gastao

  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

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos    219
apocsantos

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

  • Voto 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"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gastao    0
gastao
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)

 

Editado por gastao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos    219
apocsantos

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"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.