3

我正在尝试找到一种方法来检查文件是否已在 COBOL 中打开,以便在关闭时打开它,或者在打开时关闭它。

谢谢。

4

2 回答 2

6

检查FILE STATUS并采取相应措施。

尝试以下操作:

FILE-STATUS在下添加一个FILE-CONTROL,例如:

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

FILE STATUS将变量 in声明WORKING-STORAGEPIC 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”的值是 COBOL 标准值,因此测试“41”以检测已打开的文件应该适用于所有 COBOL 实现。当第一个字符是“9”时要小心,这些是供应商特定的文件状态代码。查看以下链接,了解如何使用 COBOL FILE STATUShttp ://www.simotime.com/vsmfsk01.htm

于 2010-02-09T15:04:11.603 回答
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.
于 2010-02-15T14:07:17.313 回答