投稿者

インターシステムズジャパン
記事 Toshihiko Minamoto · 12月 5, 2023 4m read

フォルダのファイルをリスト表示する

質問:

特定のフォルダ/ディレクトリにあるファイルをワイルドカード/フィルターによってリスト表示するにはどうすればよいか。

例えば、'C:\Temp' 内にあるすべての '*.txt' をリスト表示する場合です。

回答:

CACHE :

%Library.File の FileSet クラスクエリを使用できます。

以下に、これを使用したサンプルコードを示します(添付されています)。

 

run(pDir,pFileSpec)

      Set tRS=##class(%ResultSet).%New("%Library.File:FileSet")
      Set tSC=tRS.Execute(pDir,pFileSpec)

      Write "Name",?30,"Date Modified",?53,"Type",!
      Write "--------------------------------------------------------------------------",!

      While tRS.Next() {
            Write tRS.Get("Name"),?30,tRS.Get("DateModified"),?53,tRS.Get("Type"),!

      }

以下は、これを実行した例です。

 

USER>do run^testFileSet("C:\Temp","*.txt")

Name Date Modified Type


C:\Temp\hl7.txt 2014-07-30 12:09:18 F

C:\Temp\hsaa_msgs.txt 2015-06-25 13:02:16 F

C:\Temp\JSONRESTProxy_10.txt 2014-05-04 14:29:04 F

C:\Temp\JSONRESTProxy_8.txt 2014-05-04 14:28:09 F

C:\Temp\myTestFile2.txt 2014-05-05 09:19:31 F

C:\Temp\newStream.txt 2015-07-09 09:41:59 F

C:\Temp\oldStream.txt 2015-07-09 09:41:27 F

C:\Temp\tcpTrace.txt 2014-05-29 12:13:11 F

C:\Temp\tempadts.txt 2015-06-22 08:35:03 F

C:\Temp\WSLic.txt 2014-06-08 10:34:13 F

 

Ensemble:

BO で File Outbound Adapter を使用して、アダプターの NameList() メソッドを呼び出します。

 

以下に、これを使用したサンプル BO を示します(添付されています)。

Class Play.BO.FileOperation Extends Ens.BusinessOperation
{

Parameter ADAPTER = "EnsLib.File.OutboundAdapter";

Property Adapter As EnsLib.File.OutboundAdapter;

Parameter INVOCATION = "Queue";

Method FileList( pRequest As Ens.StringRequest, Output pResponse As Ens.Response) As %Status { #dim fileList As %ListOfDataTypes = "" Set status = ..Adapter.NameList(.fileList,pRequest.StringValue)

  // Returns list of: Filename;Type;Size;DateCreated;DateModified;FullPathName
  //                  1        2    3    4           5            6  
  If $$$ISOK(status)&&$IsObject(fileList) {
        For i=1:1:fileList.Count() {
              Set fileInfo = fileList.GetAt(i)
              $$$LOGINFO("Name: "_$Piece(fileInfo,";",1)_" / DateModified: "_$Piece(fileInfo,";",5)_" / Type: "_$Piece(fileInfo,";",2))
        }
       
  }
 
  Quit status

}

 

以下は、イベントログのサンプル出力です。

Text 
Name: WSLic.txt / DateModified: modified=2014-06-08 10:34:13 / Type: =F
Name: tempadts.txt / DateModified: modified=2015-06-22 08:35:03 / Type: =F
Name: tcpTrace.txt / DateModified: modified=2014-05-29 12:13:11 / Type: =F
Name: oldStream.txt / DateModified: modified=2015-07-09 09:41:27 / Type: =F
Name: newStream.txt / DateModified: modified=2015-07-09 09:41:59 / Type: =F
Name: myTestFile2.txt / DateModified: modified=2014-05-05 09:19:31 / Type: =F
Name: JSONRESTProxy_8.txt / DateModified: modified=2014-05-04 14:28:09 / Type: =F
Name: JSONRESTProxy_10.txt / DateModified: modified=2014-05-04 14:29:04 / Type: =F
Name: hsaa_msgs.txt / DateModified: modified=2015-06-25 13:02:16 / Type: =F
Name: hl7.txt / DateModified: modified=2014-07-30 12:09:18 / Type: =F

 

アダプターのメソッドは背後で %File:FileSet クエリを使用していることに注意してください。

元の記事へ さんが書いた @Tani Frankel