Q42:ファイルオープンエラー時の処理方法。
Q42-1:
ファイルオープンエラー時の処理方法についてお伺いいたしたく。
(やりたいこと)
別プロセスで逐次更新するテキストファイルをMZ Platform(V1.6)のaplからある時間間隔で読み込みたい。その際、エラー発生時は何もしないで次のタイミングで読み込みを行いたい。
(MZ Platformでの処理)
「タイマー」コンポーネントを使用して、ある時間間隔で次の処理を繰り返す(特定の条件でタイマーを停止する)。「テキストファイル入力」コンポーネントのメソッドで@〜Bを行う。
@ファイル名を指定して開く
A開いているファイルから1行ずつ読み込む
Bファイルを閉じる
(実行時のエラー)
上記のような処理を行った場合、@で次のようなエラーになる場合があります。
“ファイルが見つかりません[テキストファイル入力・・・] ・・・
(プロセスはファイルにアクセスできません。別のプロセスが使用中です。)”
◆質問
上記のようなエラーが発生した場合、エラーダイアログを表示しないで抜け出して次のタイミングで読み込み処理(@〜)を行うようにするにはどのようにすればよいでしょうか?
(上記の場合はエラーダイアログの「了解」ボタンに答えなくてならない。)
A42-1:
ファイルオープンエラーの件、「ファイル」コンポーネントにて該当ファイルが存在するかどうかを事前に確認する処理を追加することによりエラーを回避できます。
ファイルが存在する場合には「ファイルオブジェクトを渡して」「テキストファイル入力」コンポーネントでファイルを開きます。
その際、「テキストファイル入力」で「ファイルを閉じる」を事前に実行しておきます。
JREの問題と思いますが、一旦ファイルを開くとそのファイルが確保されてしまい、後に開けなくなる場合があることを確認しておりまして、試行錯誤的ではございますが、これはそれを回避するための処理です。
また、念のため、「テキストファイル入力」コンポーネントの「開いているファイルから1行ずつ読み込む()」[readLines()]を実行する前に、メソッド「ファイルを開いているか判定する()」[isOpen()]等を実行し、ファイルが開いていることを確認してから処理を行います。
関連ファイル:ファイルテスト.mzax (※このファイルは、ZIP形式に圧縮してあります。)
備考:「エラーメッセージ」の「Q&A3」にも記載。