Last Update : 2007/02/xx
ファイルサイズを確認する命令です。命令名の由来は、そのまま「exist」(存在する)の英単語から。
サイズはバイト単位(Byte)でシステム変数 strsize に返ってきます。もし、ファイルが存在しない場合は、strsize に-1が返るので、ファイルが存在しているかどうかのチェック機能として利用します。また、取得したファイルサイズは、バイナリファイルの読み込みを行うbload命令を呼ぶ直前の変数領域確保(sdim命令)としても利用します。
exist "ファイルパス文字列"
※サイズを文字列整形するには?
取得したバイトサイズをKB(キロバイト)やMB(メガバイト)の文字列表記に変換する、数値を3桁コンマ区切りにする。HSP3向けにWin32
API関数を利用したサンプルソースを紹介してます。(→ 参照、HSP 3あれこれ <ファイル編>)
※フォルダの有無を確認するには?
フォルダ(ディレクトリ)の有無の確認にexist命令は使えません。フォルダ(ディレクトリ)パスだとシステム変数
strsize には「ファイルが存在しない」を意味する-1が常に返ります。HSP2やHSP3共通で、dirlist命令を利用した方法があります。(→
参照、HSP 3 あれこれ <フォルダ編>)
ファイルが存在するかチェックする。そして、ファイルが存在していればファイルサイズを表示する。
; HSP本体下にあるHSPサンプルビューアファイル exist "sampview.exe" if strsize = -1 { mes "ファイルが存在しません!" stop } mes "ファイル確認("+strsize+" バイト")
カレントフォルダが変動していることを想定する場合、確実に自分自身の実行ファイルと同じフォルダ上にあるファイルの存在を調べてければ下のようにします。
exist dirinfo(1) + "\\sampview.exe"
ファイルが存在するかを事前にチェックする処理はかなーり重要です。というのも、製作したプログラムを利用するユーザーは、どのような行動にでるか分からないからです。製作者の手元ではあたりまえのように存在しうるファイルであっても、ユーザーは削除してしまったり、実行ファイル本体だけ別の場所に移動させてしまったり・・・。
そのような状況で、利用ユーザーの環境では存在しないファイルパスが指定されたbload命令、noteload命令、picload命令、exec命令、delete命令、gcopy命令、mmload命令(sndload命令)が呼ばれてしまうと、
#Error * -->内部エラーが発生しました(*)
というエラーダイアログが表示されプログラムは強制終了してしまいます。「*」はエラー番号の数値で「12」、「13」、「14」の表示のいずれかです。HSP付属のリファレンス『プログラミングマニュアル1・基本仕様ガイド (hspprog.htm)』にはエラー番号の一覧が掲載されてます。(→ 参照、HSP wiki エラーメッセージ情報)
HSPスクリプトエディタ上では、エラー番号とともにエラー行や原因も表示されますが、実行ファイルになった時点ではエラー番号だけになります。HSPを知らないユーザーにしてみれば、この番号なぞ何のことか全く分かりません。運が悪ければ、そのままゴミ箱逝きということです。(→参照、Google「HSP 内部エラーが発生しました」)
てなわけで、ファイルが存在していないことを前提とした状況を想定して、保険としてのexist命令(フォルダの場合はdirlist命令)をきっちり使うようにしたほうがいいです。