FTP ファイルを Intersystems Caché からダウンロードするメソッドを以下に示します。ご質問がある場合はメッセージをお寄せください。
{
/*---------------------------------------------------------------------------------------------------------------------------
要件に従ってファイルをダウンロードします : FTP
メソッド : 再利用可能
作成者 : Sanjib Raj Pandey、30/03/2018 に作成
= 1,3,7,100 ファイルなどの値を指定します。
= すべてのファイルをダウンロードするには "*" を指定します。
SourceFileDel = ダウンロード後にソースフォルダーのファイルを削除したい場合は.....
この値を 1 に設定します -- ; デフォルト値 : 0
1= True (ダウンロード後にソースフォルダーを削除する)、 0 = False(コピーのみ)
sFileLocation = ソースファイルの場所(フォルダー)
dLocation = 宛先フォルダー
例 :
以下の内容は ..... すべてのファイルをソースから宛先フォルダーに移動します。
w ##class(CW.COMMON).FTPDownload("IP アドレス","ユーザー名","パスワード","ソースフォルダー","宛先フォルダー,"*",1)
以下の内容は...... 200 ファイルをソースから宛先フォルダーにコピーします。
w ##class(CW.COMMON).FTPDownload("IP アドレス","ユーザー名","パスワード","ソースフォルダー","宛先フォルダー,200,0)
-------------------------------------------------------------------------------------------------------------------------
*/
// Try .. Catch のようなエラー制御をセットアップできます。
Set (count,fileNo,key,messge,fileStream,myFileName,myFile,fSave,eMessage,eSubject)=""
Set fIp= myFTP
Set fUserName= myUserName
set fPassword=myPassword
set sFileLocaion=sFileLocation
set dLocation=dLocation
Set downloadFile=noOfdownloadFile
Set sourceFileDel=sourceFileDel
If $Length(fIp)=0||($L(fUserName)=0)||($L(fPassword)=0) || ($L(downloadFile)=0) Q "資格情報が無効であるか、ダウンロードファイルが 0 です!IP、ユーザー名、パスワード、FTP または宛先の場所を確認してください!"
Set myFtp=##class(%Net.FtpSession).%New()
Set eMessage="FTP 接続に失敗しました。"_fIp_" またはユーザー名、パスワードをチェックしてください!"
Set eSubject ="FTP 警告メッセージ。"
Set myFtp.Timeout = 60
If 'myFtp.Connect(fIp,fUserName,fPassword) Quit w $$EVEMAIL^CW.COMMON(eSubject,eMessage)
Do myFtp.SetDirectory(sFileLocaion)
If 'myFtp.NameList(" ",.x) Quit "ファイルが見つかりません "
Set fileStream = ##class(%Stream.FileBinary).%New()
Set message ="コピー"
Set myFileName=""
Set fileNo=0
Set Key=""
If (downloadFile = "*")
{
While (x.GetNext(.Key))'=""
{
Do StartCopy
}
Do myFtp.Logout()
Quit fileNo_" ファイルが正常に"_message_"されました!"
}
If (downloadFile >0)
{
Set count=1
{
do StartCopy
Set count=count +1
}
Do myFtp.Logout()
Quit fileNo_" ファイルが正常に"_message_"されました!"
}
StartCopy
Set myFileName= x.GetNext(.fileNo)
Do myFtp.Binary()
Do myFtp.Retrieve(myFileName,.fileStream)
Set myFile= ##class(%Library.FileBinaryStream).%New()
Set myFile.Filename=dLocation_myFileName
Do myFile.CopyFrom(fileStream)
Set fSave=myFile.%Save()
IF ((sourceFileDel=1) && (fSave = 1))
{
Do myFtp.Delete(myFileName)
Set message="移動"
}