Published on InterSystems Developer Community (https://community.intersystems.com)

ホーム > FTP ファイルのダウンロード(すべてのファイル、ファイル数)オプション: ファイルのコピーまたはファイルの移動

記事
Toshihiko Minamoto · 2020年11月18日 3m read

FTP ファイルのダウンロード(すべてのファイル、ファイル数)オプション: ファイルのコピーまたはファイルの移動

FTP ファイルを Intersystems Caché からダウンロードするメソッドを以下に示します。ご質問がある場合はメッセージをお寄せください。

ClassMethod FTPDownload(myFTP = "", myUserName = "", myPassword = "", sFileLocation = "", dLocation = "", noOfdownloadFile = 1, sourceFileDel = )
{

/*---------------------------------------------------------------------------------------------------------------------------
要件に従ってファイルをダウンロードします : FTP

メソッド : 再利用可能

作成者 : Sanjib Raj Pandey、30/03/2018 に作成

downLoadFile = ファイル数またはすべてのファイル ...... ダウンロードしたいファイルを指定します、デフォルト値は 1 です。
= 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
While ((count <= downloadFile) && (count<=x.Count()))
{
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="移動"
}

#Code Snippet #FTP #ObjectScript #Caché

ソースURL:https://jp.community.intersystems.com/post/ftp-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%EF%BC%88%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%80%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%95%B0%EF%BC%89%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%A7%BB%E5%8B%95