Italian Ftp : rename o copy

Discussion in 'Italian Forum' started by MARCO CORRIAS, Apr 27, 2019.

  1. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Buongiorno ,
    sapete se esiste un comando o metodo per rinominare un file su un server FTP.
    Mi spiego meglio :
    tramite B4J
    utilizzo il seguente metodo per importare un file

    FTP.DownloadFile(pathOrder & filename, True, pathDest, filename)

    e, una volta elaborato il file lo cancello con

    FTP.DeleteFile(pathOrder & fileInCorso)
    .
    Vorrei tenermi copia per sicurezza ... sul server ( poi elimino i file dopo x gg. )
    Pensavo di rinominarlo , cambiare nome oppure spostarlo di posizione ... sempre sul server .

    Sapere se esiste una delle seguenti opzioni ?

    Grazie
     
  2. LucaMs

    LucaMs Expert Licensed User

    Dovrebbe essere:

    FTP.SendCommand("RNTO", "NomeFileComprensivoDelPercorso")
     
    MARCO CORRIAS likes this.
  3. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Grazie LucaMS
    ma mi confermi che manca qualcosa dalla tua info ?

    Grazie al tuo spunto ho travato 2 percorsi diversi che devo ancora provare

    Code:
    FTP.SendCommand("RNFR","myfile.tmp")
    FTP.SendCommand("RNTO","myfile.mps")

    ' oppure

    ftp2.SendCommand(
    "RNFR " & renameFrom & Chr(13) & Chr(10) & "RNTO", renameto)
     
  4. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    La seconda mi segnala questo :(

    java.lang.Exception: Sub ftp_commandcompleted signature does not match expected signature.
    public static anywheresoftware.b4a.pc.RemoteObject b4j.ftpGeos.main_subs_0._ftp_commandcompleted(anywheresoftware.b4a.pc.RemoteObject,anywheresoftware.b4a.pc.RemoteObject) throws java.lang.Exception
    class anywheresoftware.b4a.pc.RemoteObject, class anywheresoftware.b4a.pc.RemoteObject, class java.lang.Integer, class java.lang.String,


    Per completezza , ti riporto
    Code:
    Sub Ftp_CommandCompleted (ServerPath As String, Success As Boolean)
        
    If Not(Success) Then
            
    Log("SendCommandComplete failed : " & LastException)
            
        
    Else
            
    Log("SendCommandComplete Ok: ")
            
        
    End If
    End Sub
     
  5. LucaMs

    LucaMs Expert Licensed User

    Vanno bene i primi due comandi; from e to.
     
    sirjo66 likes this.
  6. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    Buongiorno,
    il codice precedente per Ftp_CommandCompleted , mi stava dando problemi !!
    Ho trovato quest'altro che differisce parecchio dal precedente ... però almeno non mi manda in crash

    Code:
    Sub Ftp_CommandCompleted ( Command As String, Success As Boolean, ReplyCode As Int, ReplyString As String)
        
    Log("Command " & Command & " Success " & Success  & " Replycode " &  ReplyCode & " Replystring " & ReplyString)
        
    If ReplyCode = 200 Then
            
    'ok
        Else
            
    'something wrong...
        End If
    End Sub
    L'unico problema è che non capisco il significato del ReplyCode .
    Il comando

    Code:
    FTP.SendCommand("RNFR" , pathOrder  & fileInCorso )
            
    FTP.SendCommand("RNTO", pathOrder  & fileInCorso & ".bak")
    esegue quello che deve fare (rinominare ) , ma il Ftp_CommandCompleted mi
    restituisce questi messaggi

    Command RNFR Success false Replycode 350 Replystring 350 RNFR accepted - file exists, ready for destination
    Command RNTO Success true Replycode 250 Replystring 250 File successfully renamed or moved

    se tutto fosse ok ... allora è errato il codice if presente nel Ftp_CommandCompleted
    che indica If ReplyCode = 200 Then ' come tutto OK

    Grazie ragazzi
     
  7. LucaMs

    LucaMs Expert Licensed User

    Sì, ho notato anch'io questa cosa. Ho cercato in giro e penso che il motivo sia soltanto perché il comando RNFR è da considerarsi "monco" finché non viene eseguito il successivo RNTO.

    Insomma, è normale, non devi preoccupartene.


    Non so quale codice ti desse quei problemi ma, come per tutti (o quasi?) i comandi B4A, puoi scrivere semplicemente Sub, uno spazio e premere il tasto di tabulazione Tab. Questo fa si che vengano elencati gli oggetti per i quali sono disponibili degli eventi; scegliendo FTP e premendo nuovamente Tab avrai la lista degli eventi associati e non avrai bisogno di digitarli ma semplicemente selezionarne uno usando i tasti cursore e di nuovo premere Tab.

    In questo modo non rischi di scrivere male il formato della routine evento.

    Tab.gif
     
    Last edited: Apr 28, 2019
    MARCO CORRIAS likes this.
  8. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    posso permettermi .....? Figoooo :)
     
    LucaMs likes this.
  9. sirjo66

    sirjo66 Well-Known Member Licensed User

    secondo me tra il primo SendCommand e l'altro c'è bisogno del wait for
     
  10. MARCO CORRIAS

    MARCO CORRIAS Member Licensed User

    o_O

    un wait for che attenda che
    FTP.SendCommand("RNFR" , pathOrder & fileInCorso )
    finisca il suo corso e poi posso lanciare

    FTP.SendCommand("RNTO", pathOrder & fileInCorso & ".bak") ????

    devo capire come :confused: !!!
     
  11. LucaMs

    LucaMs Expert Licensed User


    Code:
    FTP.SendCommand("RNFR", FileName & ".txt")
    Wait For FTP_CommandCompleted (Command As String, Success As Boolean, ReplyCode As Int, ReplyString As String)
    Log("RNFR " & Success)

    FTP.SendCommand("RNTO", FileName & ".tmp")
    Wait For FTP_CommandCompleted (Command As String, Success As Boolean, ReplyCode As Int, ReplyString As String)
    Log("RNTO " & Success)
    Vedrai che il primo log restituirà Success = False ma l'operazione finale sarà riuscita, invece.
     
    sirjo66 and MARCO CORRIAS like this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice