CALL "C$LIST-DIRECTORY"
USING OP-CODE, parameters
| OP-CODE PIC 99 COMP-X |
どの C$LIST-DIRECTORY 操作を実行するかを示します。操作については、以降の説明を参照してください。 |
パラメーターは、選択する op-code に応じて異なります。
パラメーターは情報を提供し、指定した op-code の結果を保持します。これらのパラメーターについては、以降の説明を参照してください。
C$LIST-DIRECTORY を使用すると、指定したディレクトリにあるファイルの名前を取得できます。この処理は、3 段階の操作で実行します。最初の操作では、指定したディレクトリを開きます。2 番目の操作では、リスト内のファイル名を一度に 1 つずつ返します。3 番目の操作では、ディレクトリを閉じて、ルーチンが使用したメモリ割り当てをすべて解除します。C$LIST-DIRECTORY には、次の操作コードが含まれます (acucobol.def で定義)。
C$LIST-DIRECTORY using listdir-open, "@[DISPLAY]:C:\path", pattern
LISTDIR-OPEN の呼び出しが成功すると、RETURN-CODE にリストへのハンドルが含まれます。RETURN-CODE の値は、データ項目 USAGE HANDLE に転記する必要があります。このデータ項目はディレクトリ ハンドルとして他の C$LISTDIRECTORY の操作に渡す必要があります。LISTDIR-OPEN の呼び出しが失敗した場合 (ディレクトリが存在しない、ディレクトリにファイルがない、またはディレクトリの読み取り権限がない場合)、RETURN-CODE は NULL ハンドルに設定されます。
LISTDIR-NEXT の呼び出しには、追加引数 LISTDIR-FILE-INFORMATION (「acucobol.def」で定義) を含められます。この引数は返されるファイル名についての情報を受け取ります。これはオプションのグループ項目で、次のデータ項目についての情報を返します。
B = ブロック デバイス C = 文字デバイス D = ディレクトリ F = 通常のファイル P = パイプ (FIFO) S = ソケット U = 不明
次の例では、C$LISTDIRECTORY の呼び出しを繰り返し使用し、ディレクトリの内容をリストします。
WORKING-STORAGE SECTION.
copy "def/acucobol.def".
01 pattern pic x(5) value "*.vbs".
01 directory pic x(20) value "/virusscan".
01 filename pic x(128).
01 mydir usage handle.
PROCEDURE DIVISION.
MAIN.
* CALL LISTDIR-OPEN to get a directory handle.
call "C$LIST-DIRECTORY"
using listdir-open, directory, pattern.
move return-code to mydir.
if mydir = 0
stop run
end-if.
* CALL LISTDIR-NEXT to get the names of the files.
* Repeat this operation until a filename containing only
* spaces is returned. The filenames are not necessarily
* returned in any particular order. Filenames may be
* sorted on some machines and not on others.
perform with test after until filename = spaces
call "C$LIST-DIRECTORY"
using listdir-next, mydir, filename
end-perform.
* CALL LISTDIR-CLOSE to close the directory and deallocate
* memory. Omitting this call will result in memory leaks.
call "C$LIST-DIRECTORY" using listdir-close, mydir.
stop run.