一時的にファイルを作成して表示などをしたら自動的に削除しておきたい場合がある。
特にIFSに一時的に作成したときには削除しておかないといつまでも
ハード・ディスクにゴミのファイルが増え続けてしまう。
そこでここでは自動的にファイルを消滅させる方法を紹介する。
よく製品でIFSにファイルを作成しているのを見ると
いつ削除されるのですか?という質問を受けるのだが
弊社の製品では不要になったファイルは自動消滅するように仕組んであるので
ご心配なく。
[サンプルCLP: TESTTIMCL ]
ソースはこちらから
0001.00 PGM 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* TESTTIMCL : 10 分後に消滅させるには */ 0004.00 /* */ 0005.00 /* 2021/11/21 作成 */ 0006.00 /*-------------------------------------------------------------------*/ 0007.00 /*( IFS のファイル名 )*/ 0008.00 DCL VAR(&IFS_FILE) TYPE(*CHAR) LEN(512) 0009.00 /*( 10 分後に消滅させるための変数 )*/ 0010.00 DCL VAR(&DATETIME) TYPE(*CHAR) LEN(20) 0011.00 DCL VAR(&DATE) TYPE(*CHAR) LEN(6) 0012.00 DCL VAR(&TIME) TYPE(*CHAR) LEN(6) 0013.00 DCL VAR(&HH) TYPE(*DEC) LEN(2 0) 0014.00 DCL VAR(&HHC) TYPE(*CHAR) LEN(2) 0015.00 DCL VAR(&MM) TYPE(*DEC) LEN(2 0) 0016.00 DCL VAR(&MMC) TYPE(*CHAR) LEN(2) 0017.00 DCL VAR(&SS) TYPE(*DEC) LEN(2 0) 0018.00 DCL VAR(&SSC) TYPE(*CHAR) LEN(2) 0019.00 0020.00 /*( 環境の取得 )*/ 0021.00 RTVJOBA DATETIME(&DATETIME) 0022.00 0023.00 /*( ファイル名を指定する )*/ 0024.00 CHGVAR VAR(&IFS_FILE) + 0025.00 VALUE('/AS400-NET.USR/TEMP/QTR_903779.XML') 0026.00 /*( 10 分後に一時ファイルを消す )*/ 0027.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATE) 0028.00 RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME) 0029.00 CHGVAR VAR(&HH) VALUE(%SST(&TIME 1 2)) 0030.00 CHGVAR VAR(&MM) VALUE(%SST(&TIME 3 2)) 0031.00 CHGVAR VAR(&SS) VALUE(%SST(&TIME 5 2)) 0032.00 CHGVAR VAR(&MM) VALUE(&MM + 10) 0033.00 IF COND(&MM >= 60) THEN(DO) 0034.00 CHGVAR VAR(&HH) VALUE(&HH + 1) 0035.00 CHGVAR VAR(&MM) VALUE(1) 0036.00 ENDDO 0037.00 CHGVAR VAR(&HHC) VALUE(&HH) 0038.00 CHGVAR VAR(&MMC) VALUE(&MM) 0039.00 CHGVAR VAR(&SSC) VALUE(&SS) 0040.00 CHGVAR VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC) 0041.00 SBMJOB CMD(RMVLNK OBJLNK(&IFS_FILE)) JOB(DLTIFS) + 0042.00 SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE) 0043.00 0044.00 ENDPGM
[コンパイル]
CRTCLPGM PGM(OBJLIB/TESTTIMCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
[解説]
IFS のファイルは RMVLNKコマンドで消滅させることができる。
0032.00 CHGVAR VAR(&MM) VALUE(&MM + 10) 0033.00 IF COND(&MM >= 60) THEN(DO) 0034.00 CHGVAR VAR(&HH) VALUE(&HH + 1) 0035.00 CHGVAR VAR(&MM) VALUE(1) 0036.00 ENDDO
によって10分間を加算している。
0041.00 SBMJOB CMD(RMVLNK OBJLNK(&IFS_FILE)) JOB(DLTIFS) + 0042.00 SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE)
によってSBMJOBでバッチ・ジョブでRMVLNKさせて MSGQ(*NONE)であるので
余計なメッセージが戻ることもなく自然消滅する。
よく使うテクニックなので覚えておくと便利である。