実行時関数:指定したファイルの情報を返します。ファイル名にワイルドカード (* と ?) を含むことができます。
モジュール:USE DFLIB
形式
result = GETFILEINFOQQ (files, buffer, handle)
files
(入力) CHARACTER*(*)。検索条件。フル・パス,ワイルドカード (* と ?) を含むことができます。
buffer
(入力) 構造型 FILE$INFO。検索条件に一致するファイルの情報。構造型 FILE$INFO は DFLIB.F90 (\DF98\INCLUDE サブディレクトリ) に以下のように定義されています。
TYPE FILE$INFO INTEGER(4) CREATION INTEGER(4) LASTWRITE INTEGER(4) LASTACCESS INTEGER(4) LENGTH INTEGER(4) PERMIT CHARACTER(255) NAME END TYPE FILE$INFO
handle
(入力,出力) INTEGER(4)。制御メカニズム。DFLIB.F90 に定義されている以下の定数の 1 つです。
FILE$FIRST - 最初に一致するファイルが見つかりました。
FILE$LAST - 以前のファイルが最後の有効なファイルでした。
FILE$ERROR - 一致するファイルが見つかりませんでした。
結果
結果の型は INTEGER(4) です。結果は,一致するものが見つかった場合,ファイル名の非空白の長さです。見つからなかった場合,0 になります。
複数のファイルの情報を得るには,handle に FILE$FIRST を設定して GETFILEINFOQQ を呼び出します。これは,名前と一致する最初のファイルの情報を返し,handle を返します。プログラムが複数のファイルを必要とする場合,handle を指定して GETFILEINFOQQ を呼び出さなければなりません。GETFILEINFOQQ が handle に FILE$LAST を設定する,または,システム資源が失われるまで GETFILEINFOQQ は handle を指定して呼び出されなければなりません。
構造型要素変数 FILE$INFO%CREATION,FILE$INFO%LASTWRITE,および FILE$INFO%LASTACCESS は,それぞれファイルが作成された,最後に書き込まれた,最後に参照された日時を示す詰め込まれた日時情報を含んでいます。日時を各成分に分解するには,UNPACKTIMEQQ を呼び出します。FILE$INFO%LENGTH は,ファイルの長さをバイトで持っています。FILE$INFO%PERMIT は,以下のようなファイルの参照情報を表すビット・プラグの組を持っています。
ビット・フラグ | 説明 |
---|---|
FILE$ARCHIVE | ファイルがバックアップ装置にコピーされていることを示しています。 |
FILE$DIR | 現在のディレクトリのサブディレクトリです。各 MS-DOS ディレクトリは 2 つの特殊なファイルを持っています。"." と ".." です。これらは,相対ディレクトリ表記に使われる MS-DOS が作成したディレクトリ別名です。第 1 は現在のディレクトリを参照し,第 2 は現在のディレクトリの親ディレクトリを参照します。 |
FILE$HIDDEN | 隠されたファイルです。これは,コマンド行,Microsoft ビジュアル開発環境ブラウザ,ファイル・マネージャから要求したディレクトリ一覧には表示されません。 |
FILE$READONLY | 読み取り専用ファイルです。このファイルを読むことはできますが,中身を変更することはできません。 |
FILE$SYSTEM | オペレーティング・システムが使用するファイルです。 |
FILE$VOLUME | 物理ディスク・ドライブ上の論理ボリュームまたはパーティションです。ファイルのこの形式は,物理装置のルート・ディレクトリにのみ現れます。 |
すべてのビット・フラグが 0 に設定されていることを確認するには,定数 FILE$NORMAL を使います。構造型要素変数 FILE$INFO%PERMIT が FILE$NORMAL に等しい場合,ファイルは特別な属性を持ちません。変数 FILE$INFO%NAME は,ファイルのフル・パスではなく,ファイルの短い名前をもちます。
エラーが発生した場合,GETLASTERRORQQ を呼び出してエラー・メッセージを取り出します。エラーには以下のものがあります。
ERR$NOENT - 指定したファイルまたはパスが見つかりませんでした。
ERR$NOMEM - 呼び出しを行ったプロセスが適切に割り当てられていないことを示す,コマンドを実行するのに十分なメモリーがないか,利用可能なメモリーが不正か,または,不正なブロックが存在しています。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
SETFILEACCESSQQ,SETFILETIMEQQ,UNPACKTIMEQQ
例
USE DFLIB CALL SHOWPERMISSION( ) END ! GETFILEINFOQQ の例 SUBROUTINE SHOWPERMISSION( ) USE DFLIB CHARACTER(80) files INTEGER(4) handle, length CHARACTER(5) permit TYPE (FILE$INFO) info WRITE (*, 900) ' Enter wildcard of files to view: ' 900 FORMAT (A, \) length = GETSTRQQ(files) handle = FILE$FIRST DO WHILE (.TRUE.) length = GETFILEINFOQQ(files, info, handle) IF ((handle .EQ. FILE$LAST) .OR. & (handle .EQ. FILE$ERROR)) THEN SELECT CASE (GETLASTERRORQQ( )) CASE (ERR$NOMEM) WRITE (*,*) 'Out of memory' CASE (ERR$NOENT) EXIT CASE DEFAULT WRITE (*,*) 'Invalid file or path name' END SELECT END IF permit = ' ' IF ((info%permit .AND. FILE$HIDDEN) .NE. 0) & permit(1:1) = 'H' IF ((info%permit .AND. FILE$SYSTEM) .NE. 0) & permit(2:2) = 'S' IF ((info%permit .AND. FILE$READONLY) .NE. 0) & permit(3:3) = 'R' IF ((info%permit .AND. FILE$ARCHIVE) .NE. 0) & permit(4:4) = 'A' IF ((info%permit .AND. FILE$DIR) .NE. 0) & permit(5:5) = 'D' WRITE (*, 9000) info%name, info%length, permit 9000 FORMAT (1X, A5, I9, ' ',A6) END DO END SUBROUTINE