3.4 FTPサーバ上のファイルをリネームする
FTPサーバ上のファイルを削除するときは、API関数/InternetOpenInternetConnectでFTPサーバへ接続した後、API関数/FtpRenameFileを使って行います。

参考までに、Access VBA以外に、Excel VBA(エクセルマクロ)など他のVBAでも使用することができます。
API関数/FtpRenameFileを定義する
API関数を使うとき、まずはこの関数がどこにある・どんな関数であるかといった、この関数を使うための準備(API関数の宣言)が必要です。また、定義する場所はフォーム、モジュール、クラスモジュールの(General)(Declarations)です。

次の例は、API関数/FtpRenameFileを使うときの記述例です。

'(General)(Declarations)へ記述します
'FTPサーバ上のファイルをリネームする
Private Declare Function FtpRenameFile _
            Lib "wininet.dll" _
          Alias "FtpRenameFileA" _
         (ByVal hConnect As Long _
        , ByVal lpszExisting As String _
        , ByVal lpszNew As String) As Boolean
 ※決まり事なので、悩まずにコピペして使ってしまいましょう

なお、この関数の戻り値にはリネームが成功したか、失敗したかが返ります。True*が成功*Falseが失敗です。失敗したときは、FTPサーバに接続できているか、リネームするファイルは実在するか、リネームするファイルのパスは正しいか、リネーム後のパスは正しいかをチェックしましょう。

( )内に記述している引数は、以下を参照してください。

 ◆FtpRenameFileの引数
ByVal hConnect As Long InternetConnectで取得したFTPハンドルを指定します。
ByVal lpszExisting As String リネーム対象ファイルのパスとファイル名をを指定します。できるだけフルパスで指定しましょう。
ByVal lpszNew As String リネーム後ファイルのパスとファイル名をを指定します。できるだけフルパスで指定しましょう。ちなみに、リネーム前ファイルのパスと違うパスを指定すると、ファイルの移動+リネームになります。

 *VBではTrueは「-1」ですが、このAPIではTrueのときに「1」が返ります。そのため、実行結果はErr.LastDllErrorで参照するようにしてください。こちらは、0が正常終了、0以外が異常終了です。
FtpRenameFileの使用例
FtpRenameFileを使って、FTPサーバ上のファイルをリネームする例です。Subプロシージャ「prcFTPRenameSample」を実行すると、FTPサーバへ接続しFTPサーバ上のファイルをリネームします。

FTPサーバ上のファイルをリネームするには、InternetOpenInternetConnectを使ってFTPサーバへ接続した後、FtpRenameFileを実行します。FtpRenameFileの引数hConnectには、FTPサーバへ接続したときのハンドル(例ではlngFtpHnd)を、lpszExistingにはリネーム対象のファイル名、lpszExistingにはリネーム後のファイル名を指定しましょう。ちなみに、リネームを行うときはInternetOpenの引数「dwFlags」へ0(ゼロ)を指定しオープンしてください。

例では、Functionプロシージャ「fcFTPRenameFile」で、渡された引数の内容を使い(dRmtが"/work/data/filename.txt"、dRnmが"/work/data/filename.csv")、FTPサーバ上のファイルをリネームしています。

'変数の定義 ※(General)(Declarations)です
Private lngWinINet As Long 'インターネットハンドルの保存用
Private lngFtpHnd  As Long 'FTPハンドルの保存用


Sub prcFTPRenameSample()

    Dim lngRC As Long

    'インターネットサービスをオープンします
    lngRC = fcInternetOpen

    'オープンに成功したらFTPサーバとの接続と切断を行います
    If lngRC = 0 Then

       'FTPサーバへ接続します
       lngRC = fcFTPConnect("ftp.happy-happy-island.net", "happy", "island")

       '接続に成功したら、FTPサーバ上のファイルをリネームします
       If lngRC = 0 Then
          Call fcFTPRenameFile("/work/data/filename.txt" _
                             , "/work/data/filename.csv")
       End If

    End If

    'FTPをクローズします
    Call fcFTPDisConnect

    'インターネットサービスをクローズします
    Call fcInternetClose

End Sub


Function fcFTPRenameFile(dRmt As String, dRnm As String) As Boolean

    'dRmt/リネーム前ファイル
    'dRnm/リネーム後ファイル

    Dim blnRC As Boolean

    'FTPサーバ上のファイルをリネームします
    blnRC = FtpRenamefile(lngFtpHnd, dRmt, dRnm)

    'この関数の戻り値には、TrueかFalseを返します
    If blnRC = 1 Then '1がTrue
       fcFTPRenameFile = True
    Else
       fcFTPRenameFile = False
    End if

End Function


Function fcFTPConnect(Server As String, User As String, Psw As String) As Long

    'APIの実行/FTPサーバへ接続
    lngFtpHnd = InternetConnect(lngWinINet _
                              , Server _
                              , INTERNET_DEFAULT_FTP_PORT _
                              , User _
                              , Psw _
                              , INTERNET_SERVICE_FTP _
                              , 0 _
                              , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcFTPConnect = Err.LastDllError

End Function


Function fcFTPDisConnect() As Long

    'APIの実行/FTPサーバから切断
    Call InternetCloseHandle(lngFtpHnd)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcFTPDisConnect = Err.LastDllError

End Function


Function fcInternetOpen() As Long

    'APIの実行/インターネットサービスをオープン
    lngWinINet = InternetOpen(vbNullString _
                            , INTERNET_OPEN_TYPE_PRECONFIG _
                            , vbNullString _
                            , vbNullString _
                            , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcInternetOpen = Err.LastDllError

End Function


Function fcInternetClose() As Long

    'APIの実行/インターネットサービスをクローズ
    Call InternetCloseHandle(lngWinINet)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcInternetClose = Err.LastDllError

End Function
 ※この他に、API関数を定義する必要があります。
 ※ftp.happy-happy-island.netは架空のドメイン名です。
Copyright(C) 1999-2006 結城圭介。 All rights reserved