如何检查文件是否已在COBOL中打开?

时间:2010-02-09 09:32:52

标签: file cobol indexed

我试图找出一种方法来检查文件是否已经在COBOL中打开,这样我可以打开它,如果它已关闭,或者如果它被打开则关闭它。

日Thnx。

2 个答案:

答案 0 :(得分:5)

检查FILE STATUS并采取相应行动。

尝试以下方法:

FILE-STATUS下添加FILE-CONTROL,例如:

    FILE-CONTROL.
        SELECT  MYFILE ASSIGN MYDD
                ORGANIZATION SEQUENTIAL
                ACCESS       SEQUENTIAL
                FILE STATUS  MYFILE-STATUS.

FILE STATUS中声明WORKING-STORAGE变量 作为PIC X(2)值,例如:

           01 MYFILE-STATUS   PIC X(2).
              88 MYFILE-ALREADY-OPEN   VALUE '41'.

然后在PROCEDURE DIVISION问题中为OPEN发送FILE STATUS 文件。紧接着,测试的值 如:

OPEN MYFILE.... IF MYFILE-ALRADY-OPEN CLOSE MYFILE... END-IF IF MYFILE-STATUS <> '00' perform some sort of general error routine END-IF

FILE STATUS

第一个字符不是'9'的FILE STATUS的值是 COBOL标准值因此测试'41'以检测已打开的文件 应该适用于所有COBOL实现。当第一个字符是'9'时要小心, 这些是供应商特定的文件状态代码。请查看以下链接 关于使用COBOL的一个很好的介绍{{1}}:http://www.simotime.com/vsmfsk01.htm

答案 1 :(得分:1)

您的编译器还可能提供外部API,例如CBL_CHECK_FILE_EXIST,可以在Micro Focus COBOL,AcuCOBOL和Fujutsu COBOL上找到。

例如,在Micro Focus COBOL上:

 copy "cblproto.cpy".

 program-id. MYMAIN.
 working-storage section.
 01  .
     05  file-details    cblt-fileexist-buf.

 procedure division.
     call 'CBL_CHECK_FILE_EXIST' using 'mymain.cbl '
                                       file-details
     if  return-code not = 0
       display "File mymain.cbl does not exist (or error)"
     else
       display "File mymain.cbl size is " cblt-fe-filesize
       of file-details
     end-if
 end program MYMAIN.