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.