Upload e Download FTP con VBscript

di il
2 risposte

Upload e Download FTP con VBscript

Ho creato lo script sotto riportato e funziona completamente su un pc XP pro, mentre su un pc Vista Home Premium non funziona il downlaod da FTP, nel senso che rileva il file nel sito FTP, ma poi non trasferisce nulla.
In entrambi i casi viene ignorato il flag impostato nell'istruzione (il 4) che dovrebbe nascondere il box con la barra di progressione. In pratica la barra, che sia impostato 0 o 4, continua a vedersi.


**********************

Dim strUsername, strPassword, strFTP, strPathLocal, strPathFTP

strFTP = "ftp.miosito.it"
strUsername = "username"
strPassword = "password"

strPathLocal = "S:\import\backup\"
strPathDown = "S:\import\provebackup\"
strPathFTP = "FTP://" & strUsername & ":" & strPassword & "@" & strFTP &
"/tohost/"

'----------------------------------------------------------------------------------------

Dim objShellLocal, objShellFTP, objFolderLocal, objFolderFTP

Set objShellLocal = CreateObject("Shell.Application")
Set objFolderLocal = objShellLocal.NameSpace(strPathLocal)
Set objShellFTP = CreateObject("Shell.Application")
Set objFolderFTP = objShellFTP.NameSpace(strPathFTP)
Set objShellDown = CreateObject("Shell.Application")
Set objFolderDown = objShellDown.NameSpace(strPathDown)

'Trasferisce da cartella locale a FTP
For Each Item In objFolderLocal.Items
objFolderFTP.CopyHere strPathLocal & Item.Name, 4
Wscript.sleep 1000
Next


'Trasferisce da FTP a diversa cartella locale
For Each Item In objFolderFTP.Items '
objFolderDown.CopyHere strPathFTP & Item.Name, 0
Wscript.sleep 1000
Next


Wscript.sleep 10000
msgbox "Ho Finito!"

**********************

Il suddetto script è evidentemente una prova, in realtà saranno due script distinti (upload e download). Ho provato a modificarlo sostituendo MoveHere a CopyHere, in modo che il file in origine venga eliminato dopo il trasferimento.
In questo caso lo script continua a funzionare a metà su Vista Home, mentre su XP "funzionicchia" il download, nel senso che vengono scaricati solo alcuni files e per scaricare i rimanenti bisogna ripetere più volte lo script. Nel mio esempio avevo sei files e alla prima esecuzione scaricava il primo, il secondo e il quinto file, alla seconda esecuzione il terzo e sesto file e all'ultima il quarto files. Tutto apparentemente senza logica.

Qualcuno ha già verificato questo tipo di problema?

Grazie
Ciao
Eugenio

2 Risposte

  • Re: Upload e Download FTP con VBscript

    Ciao Eugenio

    ho riscontrato il tuo medesimo problema e volevo sapere se avevi risolto. Ho notato che in locale le varie opzioni funzionano ne ho dedotto che il problema dovrebbe essere legato alla directory ftp. A me serviva l'opzione "16" che rispondere yes to all ad eventuali messaggi di windows.


    Saluti
    Leonardo
  • Re: Upload e Download FTP con VBscript

    Non ho capito granché, ma per quanto riguarda la casualità dei file scaricati lo imputo ai tempi di risposta (che ovviamente cambiano di volta in volta) dei comandi ftp. Presumo che siano processi asincroni, cioè l'esecuzione del successivo non attende il termine del precedente. Forse questo può determinare la non corretta esecuzione di tutti i trasferimenti.
    Se ho detto una cavolata, amici come prima , altrimenti occorrerebbe inventare qualche cosa per capire la reale conclusione del trasferimento e non fidarsi dello 'sleep' .
    In VB6 basta fare al posto dello sleep:
    
    Dim TimeInizio As Double
        
        TimeInizio = CDbl(Time)
        Do Until EsisteFile(FileDaScaricare)
            DoEvents
    'aspetto il timeout indicato
            If CDbl(Time) - TimeInizio > LtimeOut Then Exit Do
        Loop
    
    e la routines EsisteFile:
    
    Public Function EsisteFile(Lfile As String, Optional Ltipo As Integer = vbNormal) As Boolean
    Dim Action As Integer, Lpath As String
    
    EsisteFile = False
    If Trim$(Lfile) = "" Then Exit Function
    
    On Local Error GoTo EsisteERR
    EsisteFile = (Dir(Lfile, Ltipo) <> "")
    'sembra una ripetizione, ma risolve comportamenti diversi su sistemi diversi
    If Not EsisteFile And Ltipo = vbNormal Then EsisteFile = (Dir(Lfile) <> "")
    
    On Local Error GoTo 0
    Exit Function
    
    EsisteERR:
         Action = FileErrors(Err, Lfile)
         On Local Error GoTo 0
         Select Case Action
            Case 0
                Resume
            Case Else
                Exit Function
         End Select
    End Function
    
    dove nella FileErrors si mettono le segnalazioni volute
    Saluti
Devi accedere o registrarti per scrivere nel forum
2 risposte