複数のファイルをFTP(PUT)するには?

解決


souda  2003-10-08 00:14:13  No: 79686

はじめまして。
会社で「若い」と言う理由だけで、プログラムの作成を任されてしまいました。
ですので、いままでVBを触った事のないはまったくの初心者です。
もう自分の力ではどうしようもないので、皆さんのお力を貸してください。

作りたいプログラムは、とあるサーバーのあるフォルダ内のファイルを全て別の
サーバーにFTP(PUT)すると言う物です。
色々な参考書などを見ていたところ、以下のプログラムが使えそうなのですが…。
----------------------------------------
Option Explicit

Private Sub Form_Load()
    Dim strFtpSvr As String
    Dim strUserID As String
    Dim strPassword As String
    Dim strRemoteFile As String
    Dim strLocalFile As String
    
    strFtpSvr = "*****"        'サーバー名を設定
    strUserID = "*****"        'ユーザーIDを設定
    strPassword = "*****"      'パスワードを設定
    strRemoteFile = "*****" 'リモートファイルのパスを設定
    strLocalFile = "*****"  'ローカルファイルのパスを設定
    
    If FtpPut(strFtpSvr, strUserID, strPassword, strRemoteFile, strLocalFile) Then
    End If
End Sub

'----------------------------------------------------------
' FTP PUT
'----------------------------------------------------------
Function FtpPut(strFtpSvr As String, strUserID As String, strPassword As String, strRemoteFile As String, strLocalFile As String) As Boolean
    Dim hInternet As Long
    Dim hFTP As Long
    Dim lngret As Long
    Dim strErrText As String
    
    FtpPut = True
    
    On Error GoTo ErrHandler
    
    hInternet = InternetOpen(vbNullString, _
                             INTERNET_OPEN_TYPE_PRECONFIG, _
                             vbNullString, _
                             vbNullString, _
                             0&)
    If hInternet = 0 Then
       strErrText = "InternetOpen:GetLastError=" & Err.LastDllError()
       MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
       FtpPut = False
       Exit Function
    End If
    
    hFTP = InternetConnect(hInternet, _
                           strFtpSvr, _
                           INTERNET_DEFAULT_FTP_PORT, _
                           strUserID, _
                           strPassword, _
                           INTERNET_SERVICE_FTP, _
                           0&, _
                           0&)
           
    If hFTP = 0 Then
       strErrText = "InternetConnect:GetLastError=" & Err.LastDllError()
       MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
       FtpPut = False
       Exit Function
    End If
    
    lngret = FtpPutFile(hFTP, _
                        strLocalFile & vbNullChar, _
                        strRemoteFile & vbNullChar, _
                        FTP_TRANSFER_TYPE_BINARY, _
                        0&)
    lngret = InternetCloseHandle(hFTP)
    lngret = InternetCloseHandle(hInternet)
    
    Exit Function
ErrHandler:
    FtpPut = False
    MsgBox "<" & Err & ">" & Error(Err), vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
    Exit Function
End Function
----------------------------------------
長くなってしまい申し訳ありません。
これでは、一つのファイルのみで複数のファイルがPUTで来ません。
素人考えで、LOOP処理を入れてあげれば良いのでは?とは思うのですが、どのよう
にすればよいのかさっぱりわかりません。
また、実現可能なのであれば同じファイルがFTP先にも存在する場合はPUTしない
と言う処理も入れたいと思っています。
色々と試しては見たものの、うまくいかなくてただいま手詰まり状態です。
よろしければ、どの様に上記のプログラムを変更したらよいのかを教えていただき
たいと思います。


k.k  2003-10-08 21:55:53  No: 79687

FTPのことは詳しくないので素人レベルでの返答です。
ソースを見た限りだと
lngret = FtpPutFile(hFTP, _
                        strLocalFile & vbNullChar, _
                        strRemoteFile & vbNullChar, _
                        FTP_TRANSFER_TYPE_BINARY, _
                        0&)
この行をループすればいいのではないかとを思うのですがどうでしょう?


souda  2003-10-08 22:32:14  No: 79688

k.k様
>この行をループすればいいのではないかとを思うのですがどうでしょう?
その通りですね。
問題はどうやってループさせれば良いのか?と言うところで悩んでいました。
とりあえず、Dir関数を使いFTP元のフォルダを検索。
ファイルが存在すればPUTするという処理を実現する事が出来ました。

また「同じファイルがFTP先にも存在する場合はPUTしない」と言うのも、
PUTした際にそのファイルを違うフォルダに移す事で何とかなりそうです。

どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加