BASP21 FTPオブジェクト
BASP21 FTPオブジェクトは、ASPの VBScript やVisual Basic、EXCEL VBA
WSH(Windows Scripting Host)などから使えるファイル転送プロトコル(FTP)コンポーネントです。
●Connect(svr,user,pass) : コネクションを確立
●GetFile(remote,local[,type]) : リモートからファイルを受信
●PutFile(local,remote[,type]) : リモートへファイルを送信
●PutToday(local,remote[,type]) : リモートへ本日変更のファイルを送信
●DeleteFile(remote) : リモートのファイルを削除
●RenameFile(old,new) : リモートのファイルをリネーム
●GetDir(remote[,mode]) : リモートのファイル一覧
●Command(cmd) : FTPコマンド実行
●GetReply() : FTPコマンドの応答テキスト
●OpenLog(file[,mode]) : ログファイルオープン
●CloseLog() : ログファイルクローズ
●Close() : 接続のクローズ
BASP21 FTPオブジェクトの使い方
CreateObjectメソッドで"basp21.FTP" という名前でオブジェクトを作成します。
Set ftp = Server.CreateObject("basp21.FTP") ' ASP
Set ftp = CreateObject("basp21.FTP") ' VBA や VB
Set ftp = WScript.CreateObject("basp21.FTP") ' WSH
作成したオブジェクトでメソッドを呼出します。
変数 = ftp.メソッド名(パラメータ)
BASP21 FTPオブジェクトのメソッドの説明
- Connect
FTPサーバに接続します。
rc = ftp.Connect(svr,user,pass)
svr [in] : 接続先のIPアドレスまたはネットワークホスト名。
FTPサーバ名[:ポート番号][:タイムアウト][ファイアーウォール]。":" で区切ってポート番号(省略値21)と
タイムアウト値(秒単位、省略値120)を指定できます。
ファイアーウォール経由の場合は、次のように指定します。
fhost fuser/fpass SITE
fhost fuser/fpass
fhost
fhost OPEN
user [in] : ユーザ名。
pass [in] : パスワード。
rc [out] : 結果コードが数字で返されます。
0 : 接続OK
1 - 5 : FTP エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
10000以上 : Winsock Error
典型的なエラーは 11001 ホスト名が見つからない
-1 : ソケットオープンエラー
-2 : タイムアウト
例:
rc = ftp.Connect("ftp.microsoft.com:21:120","anonymous","who@who.com")
rc = ftp.Connect("ftp.microsoft.com proxyhost user1/pass1","anonymous","who@who.com")
- GetFile
リモートからファイルを受信します。ファイル名は、文字("*")を使って複数ファイルを指定できます。
rc = ftp.GetFile(remote,local[,type])
remote [in] : リモートのファイル名。ディレクトリの区切りは "/" を使います。
複数ファイルの指定は、 "a*.txt" 、"*"、"*.html" などのように "*" を使います。
"*" は、1回しか使えません。例えば、"*aa*.txt" は指定できません。
例: a.html --- カレントディレクトリのa.html
html/a.html --- htmlディレクトリのa.html
html/*.html --- htmlディレクトリの .html ファイルすべて
html/* --- htmlディレクトリのすべてのファイル
local [in] : ローカル(BASP21が動いているマシン)のファイル名またはディレクトリ名。
複数ファイルの場合、ディレクトリ名を指定してください。
type [in] : 受信するデータ形式を次のように指定します。
0 : ASCII(省略値)。txt/html などのテキストファイルの場合。
1 : バイナリ。jpg/gif/exe/lzh/tar.gz などのバイナリファイルの場合。
rc [out] : 結果コードが数字で返されます。
1以上 : 正常終了。送信したファイル数。
0 : 該当するファイルなし。
1,0以外 : エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
例:
rc = ftp.GetFile("html/index.html","c:\temp\html") ' テキストファイルの受信
rc = ftp.GetFile("html/index.html","c:\temp\html\index2.html") ' テキストファイルの受信(別名で保存)
rc = ftp.GetFile("html/*.html","c:\temp\html") ' テキストファイルの受信
rc = ftp.GetFile("html/images/*","c:\temp\image",1) ' バイナリファイルの受信
- PutFile
リモートへファイルを送信します。複数ファイルの送信ができます。
rc = ftp.PutFile(local,remote[,type])
local [in] : 送信するファイル名をフルパスで指定します。
複数ファイルの指定は、 "a*.txt" 、"*"、"*.html" などのように "*" を使います。
例: c:\html\a.html --- htmlディレクトリのa.html
c:\html\*.html --- htmlディレクトリの .html ファイルすべて
c:\html\* --- htmlディレクトリのすべてのファイル
remote [in] : リモートのディレクトリ名。"" は、カレントディレクトリ。
type [in] : 送信するデータ形式を次のように指定します。
0 : ASCII(省略値)。txt/html などのテキストファイルの場合。
1 : バイナリ。jpg/gif/exe/lzh/tar.gz などのバイナリファイルの場合。
2 : ASCII + 追加(Append)モード。
3 : バイナリ + 追加(Append)モード。
rc [out] : 結果コードが数字で返されます。
1以上 : 正常終了。送信したファイル数。
0 : 該当するファイルなし。
1,0以外 : エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
例:
rc = ftp.PutFile("c:\html\index.html","html") ' テキストファイルの送信
rc = ftp.PutFile("c:\html\*.html","html") ' テキストファイルの送信
rc = ftp.PutFile("c:\html\*.html","html",2) ' テキストファイルのAppendモード送信
rc = ftp.PutFile("c:\html\images\*","html/images",1) ' バイナリファイルの送信
- PutToday
リモートへ本日変更したファイルを送信します。変更したファイルだけ送信したいときに便利。
rc = ftp.PutToday(local,remote[,type])
local [in] : 送信するファイル名をフルパスで指定します。
複数ファイルの指定は、 "a*.txt" 、"*"、"*.html" などのように "*" を使います。
例: c:\html\a.html --- htmlディレクトリのa.html
c:\html\*.html --- htmlディレクトリの .html ファイルすべて
c:\html\* --- htmlディレクトリのすべてのファイル
remote [in] : リモートのディレクトリ名。"" は、カレントディレクトリ。
type [in] : 送信するデータ形式を次のように指定します。
0 : ASCII(省略値)。txt/html などのテキストファイルの場合。
1 : バイナリ。jpg/gif/exe/lzh/tar.gz などのバイナリファイルの場合。
2 : ASCII + 追加(Append)モード。
3 : バイナリ + 追加(Append)モード。
rc [out] : 結果コードが数字で返されます。
1以上 : 正常終了。送信したファイル数。
0 : エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
例:
rc = ftp.PutToday("c:\html\*.html","html") ' 今日変更したファイルを送信
- DeleteFile
リモートのファイルを削除します。複数ファイルの指定ができます。
rc = ftp.DeleteFile(remote)
remote [in] : 削除したいファイル名を指定します。ディレクトリの区切りは "/" を使います。
複数ファイルの指定は、 "a*.txt" 、"*"、"*.html" などのように "*" を使います。
"*" は、1回しか使えません。例えば、"*aa*.txt" は指定できません。
例: a.html --- カレントディレクトリのa.html
html/a.html --- htmlディレクトリのa.html
html/*.html --- htmlディレクトリの .html ファイルすべて
html/* --- htmlディレクトリのすべてのファイル
rc [out] : 結果コードが数字で返されます。
1以上 : 正常終了。削除したファイル数。
0 : エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
例:
rc =ftp.DeleteFile("html/*") ' htmlディレクトリのすべて削除
- RenameFile
リモートのファイルをリネームします。
rc = ftp.RenameFile(old,new)
old [in] : 変更前のファイル名。
new [in] : 変更後のファイル名。
rc [out] : 結果コードが数字で返されます。
2 : 変更OK
2以外 : エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
例:
rc = ftp.RenameFile("html/index.html","html/top.html") ' index.html -> top.html
- GetDir
リモートのファイル一覧を配列で返します。
farray = ftp.GetDir(remote[,mode])
remote [in] : リモートのディレクトリ名。""は、カレントディレクトリ。
mode [in] : ファイル一覧の種類。
0 : 省略値。ファイル名のみ。
1 : ディレクトリ名のみ。
2 : LISTフォーマット。LISTコマンドの結果を返します。詳細なディレクトリのリスト。
3 : NLSTフォーマット。NLSTコマンドの結果を返します。名前のみのリスト。
farray [out] : 結果が配列で返されます。エラーやエントリがないときは、配列を返しません。
例:
rc = ftp.GetDir("") ' カレントディレクトリのファイル一覧
- Command
FTPコマンドを実行します。STOR/RETR/LIST/NLSTなどのデータ転送を伴うコマンドは、実行できません。
rc = ftp.Command(cmd)
cmd [in] : コマンド名とパラメータ。実行できるコマンドは、FTPサーバによって異なります。
次のようなコマンドがFTPプロトコルでは定義されています。
○HELP [コマンド] --- サーバの実装状況などを表示。
○CWD パス名 --- ディレクトリ変更。
○CDUP --- 親のディレクトリに移動。
○RMD パス名 --- ディレクトリの削除。
○MKD パス名 --- ディレクトリの作成。
○PMD --- 作業ディレクトリ名の表示。
○SITE 文字列 --- ファイルの属性変更などのサービスの実行。HELP SITE コマンドでサービス一覧を表示できます。
○SYST --- サーバのOSの種類を表示。
○pasv --- BASP21 拡張。passive モードで以降の処理を実行。
rc [out] : 結果コードが数字で返されます。
2 : OK。実行結果のテキストは、GetReplyメソッドで求めます。
-1 : STOR/RETR/LIST/NLSTなどのデータ転送を伴うコマンドは、発行できません。
以外 : エラー。GetReplyメソッドでFTP応答テキストで詳細を調べてください。
例:
' passiveモードにする
ftp.Command("pasv") ' 一度呼出せば OK
rc = ftp.Command("HELP") ' HELPコマンド
help = ftp.GetReply() ' コマンドの応答
helpの内容(サーバによって異なります):
214-The following commands are recognized (* =>'s unimplemented).
USER PORT STOR MSAM* RNTO NLST MKD CDUP PBSZ*
PASS PASV APPE MRSQ* ABOR SITE XMKD XCUP PROT*
ACCT* TYPE MLFL* MRCP* DELE SYST RMD STOU SIZE
SMNT* STRU MAIL* ALLO CWD STAT XRMD AUTH* MDTM
REIN* MODE MSND* REST XCWD HELP PWD ADAT*
QUIT RETR MSOM* RNFR LIST NOOP XPWD CCC*
214 Direct comments to ftp-bugs@server1.
rc = ftp.Command("HELP SITE") ' HELP SITEコマンド
helpsite = ftp.GetReply() ' コマンドの応答
helpsiteの内容(サーバによって異なります):
214-The following SITE commands are recognized (* =>'s unimplemented).
UMASK IDLE CHMOD HELP
214 Direct comments to ftp-bugs@server1.
rc = ftp.Command("HELP SITE CHMOD") ' HELP SITE CHMODコマンド
helpchmod = ftp.GetReply() ' コマンドの応答
helpchmodの内容(サーバによって異なります):
214 Syntax: SITE CHMOD mode file-name
注意:OS 付属のFTPコマンドとは異なります。
quote コマンドは、SITE コマンドに対応します。
- GetReply
FTPコマンドの応答テキストを受取ります。エラーの詳細やCommandメソッドの実行結果を
受取ります。
text = ftp.GetReply()
text [out] : 応答テキストが文字列で返されます。複数行に渡る場合、CRLFが含まれます。
例:
text = ftp.GetReplay()
- OpenLog
ログファイルをオープンします。FTPサーバとのFTPコマンドのやりとりをテキストファイルに
保存します。
rc = ftp.OpenLog(file[,mode])
file [in] : ログファイルをフルパスで指定します。
mode [in] : 新規に作成する場合 0 (省略値)を、追加する場合は、 1 を指定します。
rc [out] : 結果コードが数字で返されます。
0 : OK
0以外 : エラー。
例:
rc = ftp.OpenLog("c:\ftplog.txt",1) ' 追加モードでオープン
- CloseLog
ログファイルをクローズします。
rc = ftp.CloseLog()
rc [out] : 結果コードが数字で返されます。
0 : OK
例:
rc = ftp.CloseLog()
- Close
接続を切断します。
例:
ftp.Close
サンプル
リモート(Microsoft FTPサーバ)からファイルを受信します。
●Visual Basic
Private Sub Form_Load()
Dim ftp As Object, rc As Long, v As Variant, v2 As Variant
Dim ctr As Long
Set ftp = CreateObject("basp21.FTP")
ftp.OpenLog "c:\temp\log.txt"
rc = ftp.Connect("ftp.microsoft.com", "anonymous", "")
If rc = 0 Then
v = ftp.GetDir("bussys/winnt/winnt-public", 2) ' ディレクトリ一覧(詳細)
If IsArray(v) Then
For Each v2 In v
Debug.Print v2
Next
End If
v = ftp.GetDir("bussys/winnt/winnt-public") ' ディレクトリ一覧(ファイル名のみ)
If IsArray(v) Then
For Each v2 In v
Debug.Print v2
Next
End If
rc = ftp.GetFile("bussys/winnt/winnt-public/*", "c:\temp") 'ファイル受信
End If
End
End Sub
●WSH
set bobj=createobject("basp21")
set ftp=createobject("basp21.FTP")
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad")
ftp.OpenLog "c:\temp\log.txt"
rc = ftp.Connect("ftp.microsoft.com", "anonymous", "")
If rc = 0 Then
' passiveモードにする
ftp.Command("pasv") ' 一度呼出せば OK
v = ftp.GetDir("bussys/winnt/winnt-public", 2) ' ディレクトリ一覧(詳細)
bobj.Debug v
v = ftp.GetDir("bussys/winnt/winnt-public") ' ディレクトリ一覧(ファイルのみ)
bobj.Debug v
rc = ftp.GetFile("bussys/winnt/winnt-public/*", "c:\temp") 'ファイル受信
End If
FTPプロトコルについて
FTPプロトコルの詳細は、次のサイトのRFC 959/1123日本語版が参考になります。
BUBUのページ
babaqフリーソフトのご使用上の注意
●プログラムを使って発生した損害に関しては、一切の責任を負いません。
●使用、配布に制限はありません。自由にお使いください。
●動作の保証はありません。
●動作を確認したOSは、Windows NT 4.0 とWindows 95/98のみです。
Home
Copyright 1999 Tatsuo Baba,All rights reserved.