|

|
|
 |
3.4 FTPサーバ上のファイルをリネームする |
 |
|
|
|
|
|
FTPサーバ上のファイルを削除するときは、API関数/InternetOpenとInternetConnectでFTPサーバへ接続した後、API関数/FtpRenameFileを使って行います。
参考までに、Access VBA以外に、Excel VBA(エクセルマクロ)など他のVBAでも使用することができます。
|
|
|
|
|
|
|
|
|
|
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を使って、FTPサーバ上のファイルをリネームする例です。Subプロシージャ「prcFTPRenameSample」を実行すると、FTPサーバへ接続しFTPサーバ上のファイルをリネームします。
FTPサーバ上のファイルをリネームするには、InternetOpenとInternetConnectを使って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は架空のドメイン名です。
|
|
|
|
|