Page History
...
OV_FILE_SERVICE
...
| Note |
|---|
注意: 組み込み関数の規則 |
基本的なファイル・サービスおよびディレクトリ・サービスを実行します。 注:&<a href="bif_rules.htm"&>組み込み関数の規則&</a&>
基本的なファイル・サービスおよびディレクトリ・サービスを実行します。
Windows パス名はすべて環境変数置換をサポートします。 この組み込み関数の実行プラットフォームにより、使用されるファイル名およびパスは大文字と小文字が区別されます。例えば、IBM i
この組み込み関数の実行プラットフォームにより、使用されるファイル名およびパスは大文字と小文字が区別されます。例えば、IBM i の IFS の以下の特定の領域では大文字と小文字が区別されます。
- このディレクトリの /QOpenSys と files/folders では大文字と小文字が区別されます。
- 大文字と小文字が区別されるユーザー定義ファイル システム (UDFS) が IFS ディレクトリにマウントされた場合、この位置にあるファイルとフォルダは大文字と小文字が区別されます。
| Info |
|---|
この OV 組み込み関数は LANSA のプログラムで利用されているものなので、修正しないようにしてください。この組み込み関数をカスタマイズする場合は、このコピーを作成し、それを修正するようにしてください。 |
...
この組み込み関数は、アプリケーションへの影響を考慮した上でユーザーの責任において使用してください。明示的か暗黙的かを問わず、いかなる保証もありません。「免責事項」全文を参照してください。 |
ファンクション番号: | 992 |
|---|---|
必要なDLL: | U_BIF992.DLL |
...
各製品の対応
Visual LANSA for Windows | 使用可 |
|---|
Visual LANSA for Linux | 使用可 |
|---|
LANSA/AD |
|---|
使用可(RDMLXのみで使用可能) |
RDMLXのみで使用可能
...
引数
番号 | タイプ | 必須/任意 | 説明 | 最小長 | 最大長 | 最小小数桁数 | 最大小数桁数 |
|---|---|---|---|---|---|---|---|
1 | A | 必須 | 必要なファイル・サービスのタイプ。以下のいずれかの値として渡します。 MAKE_ |
DIR ディレクトリを作成する REMOVE_ |
DIR ディレクトリを削除する REMOVE_DIR_ |
TREE ディレクトリのツリーを再帰的に削除する。注意して使用すること! CHECK_ |
DIR ディレクトリが存在するかどうかを検査する CHECK_ |
FILE ファイルが存在するかどうかを検査する SET_ |
FILE ファイルの属性を読み取り専用または標準(読み書き可能)に設定する COPY_ |
FILE ファイルを別のファイルにコピーする REMOVE_ |
FILE ファイルを削除する GET_ |
DIR ディレクトリの内容を取得する COPY_ |
DIR ディレクトリとそのすべてのサブディレクトリを別のディレクトリにコピーする。コピー先ディレクトリに同じファイルがある場合は置き換える COPY_ |
PATTERN 指定されたパターンに一致するファイルを別のディレクトリにコピーする。コピー先ディレクトリに同じファイルがある場合は置き換える | 1 | 256 |
2 | A | 任意 | 要求サービス引数1 引数1の値 この引数で渡す値: MAKE_ |
DIR 作成するディレクトリの名前 REMOVE_DIR_ |
TREE 削除するディレクトリの名前 REMOVE_ |
DIR 削除するディレクトリの名前 CHECK_ |
DIR 存在するかどうかを検査するディレクトリの名前 CHECK_ |
FILE 存在するかどうかを検査するファイルの名前 SET_ |
FILE 属性を設定するファイルの名前 COPY_ |
FILE コピー元ファイルの名前 REMOVE_ |
FILE 削除するファイルの名前 GET_ |
DIR 内容を取得するディレクトリの名前 COPY_ |
DIR コピー対象のディレクトリの名前 COPY_ |
PATTERN コピー対象のファイル・パターンを持つ完全修飾パス。サポートされるワイルドカードは*のみ | 1 | 256 |
3 | A | 任意 | 要求サービス引数2 引数1の値 この引数で渡す値: MAKE_ |
DIR 不要。渡さない REMOVE_ |
DIR 不要。渡さない REMOVE_DIR_ |
TREE 任意 (MS Windows と Linux のみサポート)。 ファイルが読み取り専用であったとしても、FORCE |
を引き渡すことで全ファイルを削除します。その他の値、または値がない場合、ファイルが読み取り専用であれば、エラーが返されます。 CHECK_ |
DIR 不要。渡さない CHECK_ |
FILE 不要。渡さない SET_ |
FILE READ_ONLYまたはNORMAL COPY_ |
FILE コピー先のファイルの名前 REMOVE_ |
FILE 任意指定(32ビットMS Windowsでのみサポート) |
読み取り専用のファイルも含め、すべてのファイルを削除するにはFORCEを渡します。その他の値を指定した場合、または値を指定しない場合は、ファイルが読み取り専用のときにエラーが返されます。 GET_ |
DIR ディレクトリの内容を取得する際に、特定タイプのファイルのみを選択するための任意指定のファイル接尾辞(例:DLL、EXE、DOC) COPY_ |
DIR コピー先ディレクトリの名前 COPY_ |
PATTERN コピー先ディレクトリの名前 | 1 | 256 |
...
戻り値
番号 | タイプ | 必須/任意 | 説明 | 最小長 | 最大長 | 最小小数桁数 | 最大小数桁数 |
|---|---|---|---|---|---|---|---|
1 | A | 任意 | 基本戻りコード OK = |
正常に完了した | 2 | 2 |
2 | N | 任意 | 拡張エラー・コード。これは、(使用可能な場合は)エラー処理またはエラー・レポートに役立つオペレーティング・システムのエラー・コードです。 | 1 | 15 | 0 | 0 |
3 | リスト | 任意 |
返された作業リスト このリストは、引数1が特定の値の場合のみ以下のように返されます。 MAKE_ |
DIR 返されない REMOVE_ |
DIR 返されない REMOVE_DIR_ |
TREE 返されない CHECK_ |
DIR 返されない CHECK_ |
FILE 返されない SET_ |
FILE 返されない COPY_ |
FILE 返されない REMOVE_ |
FILE 返されない GET_ |
DIR ディレクトリの内容を保持する作業リスト。この作業リストは1~7個のフィールド(すなわち列) |
で構成でき、完全なファイル名として返されます。 ファイル名(接尾辞なし) |
|
この作業リストの既存の内容は、この組み込み関数によってクリアされます。詳細については、以下の例を参照してください。 COPY_ |
DIR 返されない COPY_ |
PATTERN 返されない |
例
例
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ディレクトリ名を指定するよう要求し、指定されたディレクトリを作成しようとします。ディレクトリの作成操作による基本戻りコードと拡張戻りコードが表示されます。
FUNCTION OPTIONSは、ディレクトリ名を指定するよう要求し、指定されたディレクトリを作成しようとします。ディレクトリの作成操作による基本戻りコードと拡張戻りコードが表示されます。 Wiki Markup
FUNCTION OPTIONS(*DIRECT)
...
DEFINE FIELD(#OV_DIRECT)
...
TYPE(*CHAR)
...
LENGTH(65)
...
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
DEFINE FIELD(#OV_ERRNO)
...
TYPE(*DEC)
...
LENGTH(7)
...
DECIMALS(0)
...
EDIT_CODE(4)
...
BEGIN_LOOP
...
MESSAGE MSGTXT('Specify name of directory to be created')
REQUEST FIELDS((#OV_
...
DIRECT *NOID))
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(MAKE_
...
DIR #OV_DIRECT)
...
TO_GET(#OV_
...
RETC #OV_ERRNO)
...
MESSAGE MSGTXT('Response from OV_FILE_SERVICE')
...
POP_
...
UP FIELDS(#OV_
...
RETC #OV_ERRNO)
...
END_LOOP
以下のRDMLファンクションの例; 以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、C:\OV_DEMOというディレクトリを作成し、このディレクトリ内にディレクトリA、B、C、およびDを作成します。その後、作成したすべてのディレクトリを破棄します。削除(破棄)するためにはディレクトリが空である必要があるため、破棄操作は作成と逆の順序で実行されます。 FUNCTION OPTIONSするためにはディレクトリが空である必要があるため、破棄操作は作成と逆の順序で実行されます。
FUNCTION OPTIONS(*DIRECT)
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(MAKE_
...
DIR 'C:\OV_DEMO')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(MAKE_
...
DIR 'C:\OV_DEMO\A')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(MAKE_
...
DIR 'C:\OV_DEMO\B')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(MAKE_
...
DIR 'C:\OV_DEMO\C')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(MAKE_
...
DIR 'C:\OV_DEMO\D')
...
MESSAGE MSGTXT('Directories all created ....
...
use OK to delete them now')
POP_
...
UP FIELDS((
...
#DATE *
...
L3 *P2))
...
AT_LOC(
...
8 23) WITH_SIZE(
...
55 10) EXIT_KEY(*NO)
...
MENU_KEY(*NO)
...
PROMPT_KEY(*NO)
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(REMOVE_
...
DIR 'C:\OV_DEMO\A')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(REMOVE_
...
DIR 'C:\OV_DEMO\B')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(REMOVE_
...
DIR 'C:\OV_DEMO\C')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(REMOVE_
...
DIR 'C:\OV_DEMO\D')
...
EXECUTE SUBROUTINE(DIRECT)
...
WITH_PARMS(REMOVE_
...
DIR 'C:\OV_DEMO')
...
MESSAGE MSGTXT('Directories all deleted ....
...
use OK to end this function')
POP_
...
UP FIELDS((
...
#DATE *
...
L3 *P2))
...
AT_LOC(
...
8 23) WITH_SIZE(
...
55 10) EXIT_KEY(*NO)
...
MENU_KEY(*NO)
...
PROMPT_KEY(*NO)
...
SUBROUTINE NAME(DIRECT)
...
PARMS((#OV_
...
SERV *RECEIVED)
...
(#OV_
...
DIRECT *RECEIVED))
...
DEFINE FIELD(#OV_SERV)
...
TYPE(*CHAR)
...
LENGTH(20)
...
DEFINE FIELD(#OV_DIRECT)
...
TYPE(*CHAR)
...
LENGTH(65)
...
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
DEFINE FIELD(#OV_ERRNO)
...
TYPE(*DEC)
...
LENGTH(7)
...
DECIMALS(0)
...
EDIT_CODE(4)
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(#OV_
...
SERV #OV_DIRECT)
...
TO_GET(#OV_
...
RETC #OV_ERRNO)
...
IF COND('#OV_
...
RETC *NE OK')
DISPLAY FIELDS(#OV_
...
SERV (#OV_
...
DIRECT *NOID)
...
#OV_RETC #OV_ERRNO)
...
EXIT_KEY(*NO)
...
MENU_KEY(*NO)
...
PROMPT_KEY(*NO)
ABORT MSGTXT('Directory Operation failed')
ENDIF
ENDROUTINE
; ABORT MSGTXT('Directory Operation failed'); ENDIF; ENDROUTINE; 以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ディレクトリ名を指定するよう要求します。指定されたディレクトリ名が存在しない場合、そのディレクトリを作成するかどうかを指定するよう指示します。 FUNCTION OPTIONSは、ディレクトリ名を指定するよう要求します。指定されたディレクトリ名が存在しない場合、そのディレクトリを作成するかどうかを指定するよう指示します。
FUNCTION OPTIONS(*DIRECT)
...
DEFINE FIELD(#OV_DIRECT)
...
TYPE(*CHAR)
...
LENGTH(70)
...
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
DEFINE FIELD(#OV_MBA)
...
TYPE(*CHAR)
...
LENGTH(1)
...
BEGIN_LOOP
REQUEST FIELDS((#OV_
...
DIRECT *NOID))
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(CHECK_
...
DIR #OV_DIRECT)
...
TO_GET(#OV_RETC)
...
IF COND('#OV_
...
RETC =
...
OK')
...
MESSAGE MSGTXT('This directory already exists')
ELSE
USE BUILTIN(OV_MESSAGE_BOX)
...
WITH_ARGS('
...
Do you want to create this directory ?'
...
'
...
Create ?'
...
YN Q) TO_GET(#OV_MBA)
...
IF COND('#OV_
...
MBA =
...
Y')
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(MAKE_
...
DIR #OV_DIRECT)
...
TO_GET(#OV_RETC)
...
IF COND('#OV_RETC *NE OK')
MESSAGE MSGTXT('Attempt to create directory failed')
ENDIF
ENDIF
ENDIF
END_LOOP
RETC *NE OK'); MESSAGE MSGTXT('Attempt to create directory failed'); ENDIF; ENDIF; ENDIF; END_LOOP; 以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターでコピーして貼り付けることが可能)は、ファイル名を指定するよう要求し、指定されたファイルが存在するかどうかを示します。 FUNCTION OPTIONSは、ファイル名を指定するよう要求し、指定されたファイルが存在するかどうかを示します。
FUNCTION OPTIONS(*DIRECT)
...
DEFINE FIELD(#OV_DIRECT)
...
TYPE(*CHAR)
...
LENGTH(70)
...
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
BEGIN_LOOP
...
MESSAGE MSGTXT('Specify name of file whose existence is to be checked for')
REQUEST FIELDS((#OV_DIRECT *NOID))
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(CHECK_
...
FILE #OV_DIRECT)
...
TO_GET(#OV_RETC)
...
IF COND('#OV_
...
RETC =
...
OK')
MESSAGE MSGTXT('This file exists')
ELSE
MESSAGE MSGTXT('This file does NOT exist')
ENDIF
DISPLAY FIELDS((#OV_DIRECT *NOID))
END_LOOP
; MESSAGE MSGTXT('This file exists'); ELSE; MESSAGE MSGTXT('This file does NOT exist'); ENDIF; DISPLAY FIELDS((#OV_DIRECT *NOID)); END_LOOP; 以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ファイル名と、そのファイルを読み取り専用に設定するか標準(読み書き可能)に設定するかを指定するよう要求します。 FUNCTION OPTIONSに設定するかを指定するよう要求します。
FUNCTION OPTIONS(*DIRECT)
...
DEFINE FIELD(#OV_FILE)
...
TYPE(*CHAR)
...
LENGTH(70)
...
DEFINE FIELD(#OV_READ)
...
TYPE(*CHAR)
...
LENGTH(1)
...
LABEL('
...
Read Only')
...
INPUT_ATR(RB01)
...
DEFAULT(1)
...
DEFINE FIELD(#OV_NORM)
...
TYPE(*CHAR)
...
LENGTH(1)
...
LABEL('Normal')
...
INPUT_ATR(RB01)
...
DEFAULT(0)
...
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
**********
...
BEGIN_LOOP
...
MESSAGE MSGTXT('Specify name of file whose attribute is to be changed and select attribute')
REQUEST FIELDS((#OV_
...
FILE *
...
L3 *
...
P2 *NOID)
...
(#OV_
...
READ *
...
L5 *P3)
...
(#OV_
...
NORM *
...
L7 *P3))
...
IF COND('#ov_
...
read =
...
''1''')
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(SET_
...
FILE #OV_FILE READ_ONLY)
...
TO_GET(#OV_RETC)
...
...
ELSE
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(SET_
...
FILE #OV_FILE NORMAL) TO_GET(#OV_RETC)
...
ENDIF
...
IF COND('#OV_
...
RETC =
...
OK')
MESSAGE MSGTXT('File attribute successfully changed')
ELSE
MESSAGE MSGTXT('ERROR : File attribute was NOT changed')
ENDIF
END_LOOP
; MESSAGE MSGTXT('File attribute successfully changed'); ELSE; MESSAGE MSGTXT('ERROR : File attribute was NOT changed'); ENDIF; END_LOOP; 以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、コピー元ファイル名とコピー先ファイル名を指定するよう要求し、コピー操作を試行します。 FUNCTION OPTIONSは、コピー元ファイル名とコピー先ファイル名を指定するよう要求し、コピー操作を試行します。
FUNCTION OPTIONS(*DIRECT)
...
DEFINE FIELD(#OV_FROM)
...
TYPE(*CHAR)
...
LENGTH(60)
...
DEFAULT('C:\CONFIG.SYS')
...
DEFINE FIELD(#OV_TO)
...
TYPE(*CHAR)
...
LENGTH(60)
...
DEFAULT('C:\CONFIG.SAV')
...
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
**********
...
BEGIN_LOOP
...
MESSAGE MSGTXT('Specify the from and to file names')
REQUEST FIELDS(#OV_FROM #OV_TO)
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(COPY_
...
FILE #OV_FROM #OV_TO)
...
TO_GET(#OV_RETC)
...
IF COND('#OV_
...
RETC =
...
OK')
...
MESSAGE MSGTXT('File copied')
ELSE
MESSAGE MSGTXT('ERROR : File was NOT copied correctly')
ENDIF
END_LOOP
以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。この例は、CS/400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。
FUNCTION OPTIONS(*DIRECT)
DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(70)
DEFINE FIELD(#OV_FILTER) TYPE(*CHAR) LENGTH(3) LABEL('Optional Filter')
DEFINE FIELD(#OV_BYTES) TYPE(*DEC) LENGTH(9) DECIMALS(0) LABEL('Total of Sizes') EDIT_CODE(3)
DEFINE FIELD(#OV_OBJECT) TYPE(*DEC) LENGTH(7) DECIMALS(0) LABEL('Total Objects') EDIT_CODE(3)
DEF_COND NAME(*OBJECTS) COND('#ov_object *gt 0')
DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2)
DEFINE FIELD(#OV_ERRN) TYPE(*DEC) LENGTH(15) DECIMALS(0)
DEFINE FIELD(#OV_NAME) TYPE(*CHAR) LENGTH(15)
DEFINE FIELD(#OV_PREFIX) TYPE(*CHAR) LENGTH(12)
DEFINE FIELD(#OV_SUFFIX) TYPE(*CHAR) LENGTH(3)
DEFINE FIELD(#OV_DATE) TYPE(*CHAR) LENGTH(8)
DEFINE FIELD(#OV_TIME) TYPE(*CHAR) LENGTH(6)
DEFINE FIELD(#OV_ISDIR) TYPE(*CHAR) LENGTH(1)
DEFINE FIELD(#OV_SIZE) TYPE(*DEC) LENGTH(9) DECIMALS(0) EDIT_CODE(3)
DEFINE FIELD(#OV_PB01) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB01) DEFAULT('''Order By Name''')
DEFINE FIELD(#OV_PB02) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB02) DEFAULT('''Order By Suffix''')
DEFINE FIELD(#OV_PB03) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB03) DEFAULT('''Order By Date/Time''')
DEFINE FIELD(#OV_PB04) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB04) DEFAULT('''Order By Size''')
DEF_LIST NAME(#WLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) TYPE(*WORKING) ENTRYS(5000)
DEF_LIST NAME(#DLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) COUNTER(#OV_OBJECT)
**********
...
EXECUTE SUBROUTINE(WTOD)
...
BEGIN_LOOP
...
REQUEST FIELDS((#OV_
...
DIRECT *
...
L3 *
...
P2 *NOID)
...
(#OV_
...
FILTER *
...
L4 *P2)
...
(#OV_
...
PB01 *
...
L6 *
...
P2 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
PB02 *
...
L8 *
...
P2 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
PB03 *
...
L6 *
...
P38 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_...
PB04 *
...
L8 *
...
P38 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
BYTES *
...
L4 *
...
P22 *OUT)
...
(#OV_
...
OBJECT *
...
L4 *
...
P49 *OUT))
...
BROWSELIST(#DLIST)
...
CASE OF_FIELD(#IO$KEY)
...
WHEN VALUE_IS('=
...
B1')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_NAME)
...
EXECUTE SUBROUTINE(WTOD)
...
WHEN VALUE_IS('=
...
B2')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_
...
SUFFIX #OV_PREFIX)
...
EXECUTE SUBROUTINE(WTOD)
...
WHEN VALUE_IS('=
...
B3')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_
...
DATE #OV_TIME)
...
EXECUTE SUBROUTINE(WTOD)
...
WHEN VALUE_IS('=
...
B4')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_SIZE)
...
EXECUTE SUBROUTINE(WTOD)
...
OTHERWISE
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(GET_
...
DIR #OV_DIRECT #OV_FILTER)
...
TO_GET(#OV_
...
RETC #OV_ERRN #WLIST)
IF COND('#OV_
...
RETC = OK')
EXECUTE SUBROUTINE(WTOD)
ELSE
MESSAGE MSGTXT('ERROR: Unable to list specified directory ')
ENDIF
ENDCASE
END_LOOP
**********
...
SUBROUTINE NAME(WTOD)
...
CLR_
...
LIST NAMED(#DLIST)
...
CHANGE FIELD(#OV_BYTES)
...
TO(0)
...
SELECTLIST NAMED(#WLIST)
...
CHANGE FIELD(#OV_BYTES)
...
TO('#ov_
...
bytes +
...
#ov_size')
...
ADD_
...
ENTRY TO_LIST(#DLIST)
...
WITH_MODE(*DISPLAY)
...
...
...
ENDSELECT
ENDROUTINE
以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。表示されたファイル名は、ダブルクリックして削除できます。ファイルの削除要求は、メッセージ・ボックスで 以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。表示されたファイル名は、ダブルクリックして削除できます。ファイルの削除要求は、メッセージ・ボックスで\[はい\]をクリックして確定する必要があります。この例は、CS/400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。 FUNCTION OPTIONS400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。
FUNCTION OPTIONS(*DIRECT)
...
DEFINE FIELD(#OV_DIRECT)
...
TYPE(*CHAR)
...
LENGTH(70)
...
DEFINE FIELD(#OV_PIRECT)
...
REFFLD(#OV_DIRECT)
...
DEFINE FIELD(#OV_FILTER)
...
TYPE(*CHAR)
...
LENGTH(3)
...
LABEL('
...
Optional Filter')
...
DEFINE FIELD(#OV_BYTES)
...
TYPE(*DEC)
...
LENGTH(9)
...
DECIMALS(0)
...
LABEL('
...
Total of Sizes')
...
EDIT_CODE(3)
...
DEFINE FIELD(#OV_OBJECT)
...
TYPE(*DEC)
...
LENGTH(7)
...
DECIMALS(0)
...
LABEL('
...
Total Objects')
...
EDIT_CODE(3)
...
DEFINE FIELD(#OV_SELECT)
...
TYPE(*DEC)
...
LENGTH(7)
...
DECIMALS(0)
...
DEF_
...
COND NAME(*OBJECTS)
...
COND('#ov_
...
object *gt 0')
DEFINE FIELD(#OV_RETC)
...
TYPE(*CHAR)
...
LENGTH(2)
...
DEFINE FIELD(#OV_ERRN)
...
TYPE(*DEC)
...
LENGTH(15)
...
DECIMALS(0)
...
DEFINE FIELD(#OV_NAME)
...
TYPE(*CHAR)
...
LENGTH(15)
...
DEFINE FIELD(#OV_PREFIX)
...
TYPE(*CHAR)
...
LENGTH(12)
...
DEFINE FIELD(#OV_SUFFIX)
...
TYPE(*CHAR)
...
LENGTH(3)
...
DEFINE FIELD(#OV_DATE)
...
TYPE(*CHAR)
...
LENGTH(8)
...
DEFINE FIELD(#OV_TIME)
...
TYPE(*CHAR)
...
LENGTH(6)
...
DEFINE FIELD(#OV_ISDIR)
...
TYPE(*CHAR)
...
LENGTH(1)
...
DEFINE FIELD(#OV_SIZE)
...
TYPE(*DEC)
...
LENGTH(9)
...
DECIMALS(0)
...
EDIT_CODE(3)
...
DEFINE FIELD(#OV_PB01)
...
TYPE(*CHAR)
...
LENGTH(30)
...
INPUT_ATR(PB01)
...
DEFAULT('''
...
Order By Name''')
...
DEFINE FIELD(#OV_PB02)
...
TYPE(*CHAR)
...
LENGTH(30)
...
INPUT_ATR(PB02)
...
DEFAULT('''
...
Order By Suffix''')
...
DEFINE FIELD(#OV_PB03)
...
TYPE(*CHAR)
...
LENGTH(30)
...
INPUT_ATR(PB03)
...
DEFAULT('''
...
Order By Date/Time''')
...
DEFINE FIELD(#OV_PB04)
...
TYPE(*CHAR)
...
LENGTH(30)
...
INPUT_ATR(PB04)
...
DEFAULT('''
...
Order By Size''')
...
DEF_
...
LIST NAME(#WLIST)
...
FIELDS(#OV_
...
NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) TYPE(*WORKING)
...
ENTRYS(5000)
...
DEF_
...
LIST NAME(#DLIST)
...
FIELDS(#OV_
...
NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) COUNTER(#OV_OBJECT)
...
SEL_ENTRY(#OV_SELECT)
...
**********
...
BEGIN_LOOP
...
CHANGE FIELD(#OV_PIRECT)
...
TO(#OV_DIRECT)
...
REQUEST FIELDS((#OV_
...
DIRECT *
...
L3 *
...
P2 *NOID)
...
(#OV_
...
FILTER *
...
L4 *P2)
...
(#OV_
...
PB01 *
...
L6 *
...
P2 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
PB02 *
...
L8 *
...
P2 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
PB03 *
...
L6 *
...
P38 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
PB04 *
...
L8 *
...
P38 *
...
NOID *
...
OBJECTS *IOCOND)
...
(#OV_
...
BYTES *
...
L4 *
...
P22 *OUT)
...
(#OV_
...
OBJECT *
...
L4 *
...
P49 *OUT))
...
BROWSELIST(#DLIST)
...
CASE OF_FIELD(#IO$KEY)
...
WHEN VALUE_IS('=
...
B1')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_NAME)
...
EXECUTE SUBROUTINE(WTOD)
...
WHEN VALUE_IS('=
...
B2')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_
...
SUFFIX #OV_PREFIX)
...
EXECUTE SUBROUTINE(WTOD)
...
WHEN VALUE_IS('=
...
B3')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_
...
DATE #OV_TIME)
...
EXECUTE SUBROUTINE(WTOD)
...
WHEN VALUE_IS('=
...
B4')
...
SORT_
...
LIST NAMED(#WLIST)
...
BY_FIELDS(#OV_SIZE)
...
EXECUTE SUBROUTINE(WTOD)
...
OTHERWISE
...
IF COND('(#ov_
...
pirect =
...
#ov_direct)
...
*
...
and (#ov_
...
select *gt 0) *and (#ov_
...
object *gt 0)')
...
EXECUTE SUBROUTINE(DELETE_FIL)
...
ELSE
...
EXECUTE SUBROUTINE(LOAD_DIR)
...
ENDIF
...
ENDCASE
...
END_LOOP
...
**********
...
SUBROUTINE NAME(LOAD_DIR)
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(GET_
...
DIR #OV_DIRECT #OV_FILTER)
...
TO_GET(#OV_
...
RETC #OV_ERRN #WLIST)
IF COND('#OV_
...
RETC = OK')
EXECUTE SUBROUTINE(WTOD)
ELSE
MESSAGE MSGTXT('ERROR: Unable to list specified directory ')
ENDIF
ENDROUTINE
*********
...
*
SUBROUTINE NAME(DELETE_FIL)
...
DEFINE FIELD(#OV_MBA)
...
TYPE(*CHAR)
...
LENGTH(1)
...
DEFINE FIELD(#OV_MSG)
...
TYPE(*CHAR)
...
LENGTH(100)
...
GET_
...
ENTRY NUMBER(#OV_SELECT)
...
FROM_LIST(#DLIST)
...
IF COND('#ov_
...
isdir =
...
Y')
...
MESSAGE MSGTXT('Selected object is a directory and cannot be deleted')
ELSE
USE BUILTIN(BCONCAT) WITH_ARGS('Confirm that file' #OV_NAME 'is to deleted') TO_GET(#OV_MSG)
...
USE BUILTIN(OV_MESSAGE_BOX)
...
WITH_ARGS(#OV_
...
MSG 'Delete File' YN Q) TO_GET(#OV_MBA)
...
IF COND('#OV_
...
MBA =
...
Y')
...
USE BUILTIN(TCONCAT)
...
WITH_ARGS(#OV_
...
DIRECT '\'
...
#OV_NAME)
...
TO_GET(#OV_MSG)
...
USE BUILTIN(OV_FILE_SERVICE)
...
WITH_ARGS(REMOVE_
...
FILE #OV_MSG)
...
TO_GET(#OV_RETC)
...
IF COND('#OV_
...
RETC = OK')
EXECUTE SUBROUTINE(LOAD_DIR)
...
MESSAGE MSGTXT('File successfully deleted')
ELSE
MESSAGE MSGTXT('ERROR : Attempt to delete file failed')
ENDIF
ENDIF
ENDIF
ENDROUTINE
**********
...
SUBROUTINE NAME(WTOD)
...
CLR_
...
LIST NAMED(#DLIST)
...
CHANGE FIELD(#OV_BYTES)
...
TO(0)
...
SELECTLIST NAMED(#WLIST)
...
CHANGE FIELD(#OV_BYTES)
...
TO('#ov_
...
bytes +
...
#ov_size')
...
ADD_
...
ENTRY TO_LIST(#DLIST)
...
WITH_MODE(*DISPLAY)
...
ENDSELECT
...
...
...
ENDROUTINE