記事
· 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) "資格情報が無効であるか、ダウンロードファイルが 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  $$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) && (countx.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="移動"
}

ディスカッション (0)2
続けるにはログインするか新規登録を行ってください