Italian Ftp : rename o copy

MARCO CORRIAS

Active 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
 

MARCO CORRIAS

Active 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

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

' oppure

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

MARCO CORRIAS

Active 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
B4X:
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
 

MARCO CORRIAS

Active 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

B4X:
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

B4X:
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
 

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.


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
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:

sirjo66

Well-Known Member
Licensed User
secondo me tra il primo SendCommand e l'altro c'è bisogno del wait for
 

MARCO CORRIAS

Active Member
Licensed User
secondo me tra il primo SendCommand e l'altro c'è bisogno del wait for
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: !!!
 

LucaMs

Expert
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: !!!

B4X:
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.
 
Top