MikoScript3 言語仕様
ファイル
本言語には、ファイル関連の機能が、あらかじめ組み込まれています。ここでは、
それに関して、以下の構成で説明します。
ファイル入出力
.Open ファイルを開く
.Close ファイルを閉じる
.Read ファイルから読み込む
.Write ファイルへ書き込む
.Seek 現入出力位置の移動
.Flush 内部保管データの書き出し
.Size 書き込み済みサイズの取得/変更
.BuffSize 内部バッファサイズの取得/変更
.DetectEnc 文字符号化方式の検出
.CBO 数値入出力でのバイト順入れ替え
.Fill 値充満
.Lock 特定データ区間の独占設定
.Unlock 特定データ区間の独占解除
.IsOpened ファイルは開いているか?
.IsEnd 読み込みの終端到達?
.ClearEnd 終端到達フラグクリア
ファイル操作
.SetCurPath カレントパスの設定
.GetCurPath カレントパスの取得
.IsExisting ファイルは存在するか?
.Delete ファイルの削除
.Copy ファイルのコピー
.Move ファイルの移動
.Rename ファイルの名前変更
.MakeDir ディレクトリの新規作成
.GetInfo ファイル情報の取得
.SetAttr ファイルの属性設定
.SetTime ファイルのタイムスタンプ設定
.IsReadOnly 読み込み専用か?
.IsDirectory ディレクトリか?
.IsExecutable 実行可能ファイルか?
.GetNamePart ファイルのフルパス名の各部分抽出
.GetProgramPath 本実行プログラムのパスを取得
ファイルリスト
.ListOpen ファイルリストを開く
.ListNext ファイルリストを次のファイル情報に更新
.ListClose ファイルリストを閉じる
■ファイル入出力
ファイルには、データが格納されていますが、ここでは、そのデータの入出力
(読み書き)について説明します。
ファイルのデータの入出力を行なうには、まず、そのファイルを開く必要が
あります。それには、::File.Open() という関数をコールします。その結果が
成功なら、その返値は、ファイル入出力クラスのインスタンスになります。
これを使って、そのファイルのデータの読み出しや書き込み等を行ないます。
その入出力処理が終われば、最後にそのインスタンスを破棄する必要があります。
その破棄の時に、そのファイルは(自動的に)閉じられます。ちなみに、
ファイルの入出力では、エラーワープ が利用できます(詳細後述)。
本言語のファイルの入出力では、テキストデータだけでなく、任意の構造の
バイナリーデータの読み書きが、容易に行なえます。これは、入出力の対象と
なるデータ側に、入出力形式を設定することによって実現しています。
次に、ファイル入出力関連の関数について詳細に説明します。なお、以降で、
File という表記は、ファイル入出力クラスのインスタンスを示します。
簡単のため、これを単に「ファイルインスタンス」と呼ぶことがあります。
Open 関数 -- ファイルを開く
書式: ::File.Open( name, mode, bfsz )
機能: ファイルを開いて、その入出力用のインスタンスを返します。
引数: name は、開くファイルの名前を指定します(必須)。
このファイル名に、パスを付けても構いません。
mode は、入出力モードを、以下の文字列で、指定します(必須)。
"in" 既存ファイルからの読み込み
"out" 既存/新規ファイルへの書き込み
"io" 既存/新規ファイルに対する読み込みと書き込み
"new" 新規ファイルに対する読み込みと書き込み
bfsz は、ファイル入出力用の内部バッファのサイズを指定します。
これが省略された時は、デフォールトのサイズになります。
返値: そのファイルの入出力クラスのインスタンスが返ります。
エラー時は、null になります。
補説: 返値のインスタンスは、複合箱で、その中には、以下の名前の箱が
入っています。
_iobuf そのファイルの入出力管理データとバッファ
path そのファイルのフォルダーのフルパス名
name そのファイルの名前
この複合箱の中身は、_iobuf 以外、任意に変更しても構いません。
例えば、そのファイルに関連する各種の変数を追加しても構いません。
用例:
file = ::File.Open( "Report.txt", "in" );
if( file == null )
'Error!( ::ErrorMessage( $err_code, $err_info ), "\n" );
Close 関数 -- ファイルを閉じる
書式: File.Close()
機能: 対象のファイルを閉じます。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
補説: 正常終了時には、File 複合箱内の path, name, _iobuf の各箱が
削除されます( ::File.Open() の「補説」参照 )。
用例:
file.Close();
Read 関数 -- ファイルから読み込む
書式: File.Read( <箱>, ... )
機能: 引数で指定された各 <箱> の入出力形式に応じて、対象のファイルから
データを読み込んで、その <箱> に代入します。
説明: 本関数の引数には、ファイルから入力したデータを設定する <箱> を
指定します。この引数は、任意の個数だけ指定できます。
各引数へは、指定された順に入力されます。
各引数には、以下の種類の <箱> が指定できます。
・数値や文字列の変数
・構造体、純粋配列、ビットフィールド
・ファイル/バッファのインスタンス
各 <箱> には、入出力形式が設定されている必要があります。
各 <箱> への入力は、この入出力形式に応じて行なわれます。
<箱> に入出力形式が無い場合に関しては、以下で説明しています。
・純粋配列の入出力
・入出力形式なしでの入出力
ファイルからの読み込みは、現入出力位置から始まります。
現入出力位置は、ファイルから読み込んだバイト数分だけ進みます。
読み込みができるのは、データのある範囲のみです。
返値: 読み込み成功時、読み込んだバイト数( >= 0 )
読み込み失敗時(エラー時)、-1
注意: データのある範囲の終端を越えて読み込もうとした場合、入力対象の
<箱> の種類によって、その対応が異なります。これも、「入出力形式」
の章で説明しています。もし、エラーになる場合には、例外が発生
します。この例外は、エラーワープで捕捉できます。この
場合のエラーワープ先のラベル名は、
OnFileEnd
になります。勿論、全エラー共通の OnError というラベルでも、この
例外を捕捉できます。一方、エラーワープ先が設定されていなければ、
-1 が返されるだけです。
補説: データのある範囲の終端を越えて読み込もうとした時には、また、
「入力終端到達フラグ」がセットされます。これは、IsEnd()
関数と ClearEnd() 関数に関連しています。
注意: 本関数の実行時に、上記の入力終端到達以外のエラーが発生すると、
OnFileError で捕捉できる例外が発生します。
用例: ・以下にいろいろな読み出し方を示します。
( ここで、file は、::File.Open() の返値のファイルインスタンス )
file.Read( A'BYTE ); // 箱 A に次の1バイト整数値を読み込む
file.Read( A'LONG ); // 箱 A に次の4バイト整数値を読み込む
file.Read( A'LINE ); // 箱 A に次の1行の文字列を読み込む
file.Read( A'T(5) ); // 箱 A に次の5文字を読み込む
・・・・・
・テキストファイルから1行ずつ読み出す場合 ⇒ 参照
・バイナリーファイルから構造体に読み出す場合 ⇒ 参照
・ファイルの全内容をバッファへ読み出す場合 ⇒ 参照
・ファイルを純粋配列へ読み出す場合 ⇒ 参照
・ファイルをメモリーブロックへ読み出す場合 ⇒ 参照
Write 関数 -- ファイルへ書き込む
書式: File.Write( <項目>, ... )
機能: 引数で指定された各 <項目> のデータを、その入出力形式に応じて、
対象のファイルへ書き込みます。
説明: 本関数の引数には、ファイルへ出力する <項目> を指定します。
この引数は、任意の個数だけ指定できます。
各引数は、指定された順に出力されます。
各引数には、以下の種類の <項目> が指定できます。
・数値や文字列の定数/変数
・構造体、純粋配列、ビットフィールド
・ファイル/バッファのインスタンス
各 <項目> は、それに「入出力形式」が設定されていれば、それに応じて、
出力されます。さもなければ、デフォ−ルトの形式で出力されます。
ファイルへの書き込みは、現入出力位置から始まります。
現入出力位置は、ファイルへ書き込んだバイト数分だけ進みます。
書き込みがファイルの終端を超過した時は、ファイルのサイズが自動的に
拡張されます。
補説: <項目> が文字列で「入出力形式」が設定されていない場合、'CharEnc で
指定されている符号化方式の文字コードに変換されて出力されます。
返値: 書き込み成功時、書き込んだバイト数( >= 0 )
書き込み失敗時(エラー時)、-1
補説: 本関数で書き込みを行なった時、そのデータは、内部的に保管されている
だけで、実際には物理ファイルに書き込まれていないかもしれません。
確実に物理ファイルに書き込むには、.Flush() または .Close() を行なう
必要があります。
注意: 本関数の実行時にエラーが発生すると、OnFileError で捕捉できる
例外が発生します。
用例: ・以下にいろいろな書き込み方を示します。
( ここで、file は、::File.Open() の返値のファイルインスタンス )
file.Write( A ); // 箱 A の値をデフォ−ルトの形式で書き込む
file.Write( A'BYTE ); // 箱 A の値を1バイト整数値で書き込む
file.Write( A'LONG ); // 箱 A の値を4バイト整数値で書き込む
file.Write( A'C(12) ); // 箱 A の値を 12 桁の ASCII文字列として書き込む
・・・・・
・テキストデータをファイルへ書き込む場合 ⇒ 参照
・構造体のデータをファイルへ書き込む場合 ⇒ 参照
・バッファの内容をファイルへ書き込む場合 ⇒ 参照
Seek 関数 -- 現入出力位置の移動
書式: File.Seek( <位置>, <基点> )
機能: ファイルの現入出力位置を、<位置> と <基点> で指定された位置に
移動します。また、現入出力位置を取得します。
説明: <位置> は、<基点> からの相対値(バイト数)を指定します。
<基点> は、次のどれかの文字列で指定します。
"top" or "TOP" ・・・ 先頭から(デフォールト)
"cur" or "CUR" ・・・ 現在位置から
"end" or "END" ・・・ 終端から
<基点> が省略された時は、先頭からになります。
<位置> が省略された時は、現入出力位置は、移動しません。
現入出力位置を取得するだけの場合、<位置> と <基点> を省略、
つまり、引数なしで、本関数をコールします。
返値: 移動した場合、その移動後の現入出力位置
移動しなかった場合、現在の現入出力位置
エラーの場合、-1
注意: <位置> と <基点> で指定された現入出力位置が、書き込み済み範囲の
終端を越える場合、書き込み済み範囲がそこまで拡張されます。また、
それが、バッファ終端を越える場合には、バッファサイズがそこまで
拡張されます。拡張された部分の内容は、不定です。
補説: 本関数の実行で、入力終端到達フラグはクリアされます。
用例: ( 以下で、file は、::File.Open() の返値のファイルインスタンス )
file.Seek( 100 ); // 先頭から 100 バイトの位置へ移動
file.Seek( 80,"cur" ); // 現位置から 80 バイト先の位置へ移動
file.Seek( 0, "end" ); // 終端位置へ移動
file.Seek( -4,"end" ); // 終端から 4 バイト前の位置へ移動
file.Seek(); // 現在位置を取得
Flush 関数 -- 内部保管データの書き出し
書式: File.Flush()
機能: 内部に保管されている未書き込みデータを全てファイルへ書き出します。
説明: .Write() で書き込みを行なっても、そのデータは、内部的に保管されて
いるだけで、実際に物理ファイルに、書き込まれている保障はありません。
しかし、この .Flush() 関数を実行すると、それが保障されます。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
file.Flush();
Size 関数 -- 書き込み済みサイズの取得/変更
書式: File.Size( <サイズ> )
説明: <サイズ> の指定がない場合、現在の書き込み済みサイズ(バイト数)
を返します。
<サイズ> の指定がある場合、書き込み済みサイズを、その指定値
のバイト数に、変更します。この変更では、現在のサイズよりも、
大きくすることも、小さくすることもできます。
返値: サイズ変更した場合、その変更後の書き込み済みサイズ
サイズ変更しなかった場合、現在の書き込み済みサイズ
エラーの場合、-1
用例:
print file.Size(); // 現在のファイルサイズをプリント
file.Size( 0 ); // 現在のファイルサイズを 0 に変更
BuffSize 関数 -- 内部バッファサイズの取得/変更
書式: File.BuffSize( <サイズ> )
説明: <サイズ> の指定がない場合、現在の内部バッファサイズ(バイト数)を
返します。
<サイズ> の指定がある場合、内部バッファサイズを、その指定値の
バイト数に、変更します。この変更では、現在のサイズよりも、
大きくすることも、小さくすることもできます。
返値: サイズ変更した場合、その変更後のバッファサイズ
サイズ変更しなかった場合、現在のバッファサイズ
エラーの場合、-1
補説: 本関数は、ファイルを開いていない時でも、実行できます。
DetectEnc 関数 -- 文字符号化方式の検出
書式: File.DetectEnc( <サイズ> )
機能: ファイル内の指定範囲のテキストの文字符号化方式を検出します。
説明: <サイズ> は、次のように調査範囲を指定します。
>= 0: 現入出力位置から、<サイズ> バイト先まで
省略: 現入出力位置から、所定のバイト先まで
返値: 次の2項値を返します。(但し、エラー時は、NULL を返します。)
第1項: 文字符号化方式の名称
第2項: BOM(Byte Order Mark)の有無を示す真偽値
(ユニコード系のみ有効)
補説: 本関数の実行前後で、ファイルの内容や現入出力位置は、変わりません。
CBO 関数 -- 数値入出力でのバイト順入れ替え
書式: File.CBO( flag )
機能: ファイルで数値を入出力するとき、バイト順を入れ替えるか否かを設定します。
また、現状態を取得します。
説明: バイト順の入れ替えとは、ビッグエンディアンとリトルビッグエンディアンの
変換のことです。引数の flag に真値(1) を指定すると、このファイルで、
整数値、実数値、純粋配列、ビットフィールドのビット値
を入出力する際に、この変換が自動的に行なわれるようになります。一方、
引数の flag に偽値(0) を指定すると、この変換は行なわれなくなります。なお、
flag が省略のときは、現在の状態を返すだけです。
返値: バイト順を入れ替える設定になっているか否かの真偽値( 1 or 0 )を返します。
参照: ⇒ Buffer.CBO()
Fill 関数 -- 値充満
書式: File.Fill( <サイズ>, <値> )
機能: 現入出力位置から <サイズ> で指定されたバイト数分の範囲内にある
全バイトを、<値> で指定されたバイト値に設定します。
説明: <サイズ> は、正の数値でなければいけません。さもなければ、
エラーになります。
<値> は、その整数値の下位8ビット(1バイト)のみが有効です。
<値> が省略された場合、0 値として扱います。
本関数の実行で、現入出力位置は、<サイズ> 分だけ進みます。
返値: 正常終了時は、実際に充満したサイズを返します。
エラー発生時は、0以下または、<サイズ> より小さい値を返します。
用例:
file.Fill( 100, 0 ); // 現入出力位置から 100 バイト分を 0 クリア
Lock 関数 -- 特定データ区間の独占設定
書式: File.Lock( <開始位置>, <サイズ> )
機能: ファイル内の指定区間を、他のプロセスからアクセスできないように、
ロックします。
説明: <開始位置> は、ロックする区間の開始位置を指定します。
<サイズ> は、ロックする区間のサイズを指定します。
どちらの引数も、その単位は、バイト数です。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
注意: ロックする区間は、すでにロックしてある区間と重ならないこと。
用例:
file.Lock( 1000, 500 );
Unlock 関数 -- 特定データ区間の独占解除
書式: File.Unlock( <開始位置>, <サイズ> )
機能: ファイル内の指定区間のロックを解除します。
説明: <開始位置> は、ロックを解除する区間の開始位置を指定します。
<サイズ> は、ロックを解除する区間のサイズを指定します。
どちらの引数も、その単位は、バイト数です。
注意: ロックを解除する各区間は、ロックした各区間と、各々正確に一致しないと
いけません。
ファイルをロックしたまま、プロセスが終了してはいけません。
ファイルをロックしたまま、そのファイルをクローズしてはいけません。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
file.Unlock( 1000, 500 );
IsOpened 関数 -- ファイルは開いているか?
書式: File.IsOpened()
機能: 対象のファイルが開かれているか否かを調べます。
返値: そのファイルが開かれている時は、真値(1)を、さもなければ、偽値(0) を
返します
用例:
if( file.IsOpened() ) ...
IsEnd 関数 -- 読み込みの終端到達?
書式: File.IsEnd()
機能: ファイルの読み込みが終端に達したか否かを調べます。
返値: ファイルの読み込みが終端に達っしていれば、真値(1)を、さもなければ、
偽値(0) を返します
用例:
if( file.IsEnd() ) ...
ClearEnd 関数 -- 終端到達フラグクリア
書式: File.ClearEnd()
機能: ファイルの読み込みの終端到達フラグをクリアします。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
file.ClearEnd();
ファイルインスタンスの破棄
ファイルインスタンスは、他のオブジェクトの場合と同様に、delete 文で、
明示的に破棄できます。また、それが含まれているスコープが無くなる時に、
自動的(暗黙的)に破棄されます。
ファイルインスタンスが破棄されると、そのファイルは自動的(強制的)に
閉じられます。そのため、ファイルインスタンスを、.Close() しないまま破棄
しても大丈夫です。
ファイル入出力でのエラーワープ
ファイルの入出力でエラーが発生した時、
OnFileError
という名前のラベルがあれば、そこへ制御が移ります。つまり、そこへ
エラーワープ します。また、ファイルの読み出しで終端に達した時、
OnFileEnd
という名前のラベルがあれば、そこへ制御が移ります。
■ファイル操作
前節のファイル入出力は、ファイルを開いて、その中のデータを扱いましたが、
本節のファイル操作は、ファイル全体、または、ディレクトリを扱うので、
ファイルを開く必要はありません(というよりもファイルを開かずに行ないます)。
ここで説明するファイル操作関連の関数の引数に、<ファイル名> や <パス名>
等を指定する場合、それは、単独のファイル名(あるいは、ディレクトリ名)でも、
パス付きでも構いません。なお、それが相対パスの場合は、現カレントパスが基準
になります。
SetCurPath 関数 -- カレントパスの設定
書式: ::File.SetCurPath( <パス名> )
機能: カレントパス(カレントディレクトリー)を、<パス名> で指定された
パスに設定します。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
::File.SetCurPath( $"D:\Tools\Epsaly\Scripts" );
::File.SetCurPath( $"..\Backup" );
GetCurPath 関数 -- カレントパスの取得
書式: ::File.GetCurPath()
機能: 現在のカレントパス(カレントディレクトリ)のフルパスの文字列を
返します。
用例:
print ::File.GetCurPath();
IsExisting 関数 -- ファイルは存在するか?
書式: ::File.IsExisting( <ファイル名> )
機能: <ファイル名> で指定されたファイル(または、ディレクトリー)が、
存在すれば、真値(1) を返し、存在しなければ、偽値(0) を返します。
用例:
if( ::File.IsExisting( "FileA.txt" ) ) ...
Delete 関数 -- ファイルの削除
書式: ::File.Delete( <ファイル名> )
機能: <ファイル名> で指定されたファイル(または、ディレクトリ)を削除します。
<ファイル名> が相対パスの場合、現カレントパスが基準になります。
なお、対象がディレクトリの場合、その中が空でないと、削除されません。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
::File.Delete( "TempFile" );
Copy 関数 -- ファイルのコピー
書式: ::File.Copy( <ファイルA>, <ファイルB> )
機能: <ファイルA> を <ファイルB> にコピーします。
<ファイルB> が既存の時、コピーは行なわれません。
<ファイルA> がディレクトリの場合、コピーはできません。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
::File.Copy( "index.html", "Backup\\index-01.html" );
Move 関数 -- ファイルの移動
書式: ::File.Move( <ファイルA>, <ファイルB> )
機能: <ファイルA> を <ファイルB> に移動します。
<ファイルB> が既存の時、移動は行なわれません。
<ファイルA> がディレクトリの場合、名前変更のみが可能です。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
::File.Move( "style.css", "NewHTMLs\\style.css" );
Rename 関数 -- ファイルの名前変更
書式: ::File.Rename( <ファイルA>, <ファイルB> )
機能: <ファイルA> を <ファイルB> に改名します。
これは、.Move() 関数と、名前が違うだけで、機能は全く同じです。
MakeDir 関数 -- ディレクトリの新規作成
書式: ::File.MakeDir( <ディレクトリ名> )
機能: <ディレクトリ名> のディレクトリを新規に作成します。
<ディレクトリ名> のディレクトリが既存の場合は、エラーになります。
本関数で新規に作成できるのは、1つのディレクトリだけです。つまり、
<ディレクトリ名> のパスに、複数の新規ディレクトリがあると、エラーに
なります。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
::File.MakeDir( "Backup" );
GetInfo 関数 -- ファイル情報の取得
書式: ::File.GetInfo( <ファイル名> )
機能: <ファイル名> のファイルの情報を保持した複合箱を返します。
説明: この複合箱の中には、次の名前と中身の各箱が入っています。
Size ファイルサイズ(整数値)
AttrCode 属性コード(整数値)
CreationTime 作成日時(文字列)
LastAccessTime 最終使用日時(文字列)
LastWriteTime 最終書込日時(文字列)
補説: この複合箱は、ファイル情報クラスのインスタンスになっているので、
次のメンバー関数にアクセスできます。
IsReadOnly() 読み出し専用か否かの真偽値を返す
IsDirectory() ディレクトリか否かの真偽値を返す
IsExecutable() 実行可能か否かの真偽値を返す
注意: <ファイル名> が不正等でエラーになった時、返値は null になります。
用例:
FileInfo = ::File.GetInfo( "Report.txt" );
if( FileInfo == null )
'Error!( ::ErrorMessage( $err_code, $err_info ), "\n" );
print " サイズ: " : FileInfo.Size;
print "作成日時: " : FileInfo.CreationTime;
print "更新日時: " : FileInfo.LastWriteTime;
print "読出専用: " : ( FileInfo.IsReadOnly() ? "Yes" : "No" );
SetAttr 関数 -- ファイルの属性設定
書式: ::File.SetAttr( <ファイル名>, <属性指定> )
機能: <ファイル名> のファイル(あるいはディレクトリ)の属性を <属性指定> に
応じて設定します。
説明: <属性指定> は、以下の文字列で指定します。
"ReadOnly=1" ・・・ 読み込み専用に設定
"ReadOnly=0" ・・・ 読み込み専用を解除
現状、これ以外の属性指定はありません。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
File.SetAttr( "Report012.txt", "ReadOnly=1" )
SetTime 関数 -- ファイルのタイムスタンプ設定
書式: ::File.SetTime( <ファイル名>, <作成日時>, <最終使用日時>, <最終書込日時> )
機能: <ファイル名> のファイル(あるいはディレクトリ)の各種タイムスタンプを
設定します。
説明: 対象のタイムスタンプには、<作成日時>, <最終使用日時>, <最終書込日時>
の3種類があります。どの日時も、次の形式の文字列で指定します。
"YYYY-MM-DD HH:MM:SS"
日時の指定が不正または省略時、そのタイムスタンプは変更されません。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
注意: ディレクトリのタイムスタンプの設定は、Windows95 系ではできないかも
しれません。
用例:
::File.SetTime( "Note.txt", , , "2009-12-17 15:38:00" );
// これは、最終書込日時(更新日時)のみを変更します。
IsReadOnly 関数 -- 読み込み専用か?
書式: ::File.IsReadOnly( <ファイル名> )
機能: <ファイル名> のファイル(あるいはディレクトリ)が、読み込み専用なら、
真値(1) を返し、さもなければ、偽値(0) を返します。
但し、対象ファイルが不在、または、引数不正等の時は、-1 を返します。
用例:
if( ::File.ReadOnly( "Data.txt" ) ) ...
IsDirectory 関数 -- ディレクトリか?
書式: ::File.IsDirectory( <ファイル名> )
機能: <ファイル名> のファイル(あるいはディレクトリ)が、ディレクトリなら、
真値(1) を返し、さもなければ、偽値(0) を返します。
但し、対象ファイルが不在、または、引数不正等の時は、-1 を返します。
用例:
if( ::File.IsDirectory( "Backup" ) ) ...
IsExecutable 関数 -- 実行可能ファイルか?
書式: ::File.IsExecutable( <ファイル名> )
機能: <ファイル名> のファイルが、実行可能なら、真値(1) を返し、さもなければ、
偽値(0) を返します。
但し、対象ファイルが不在、または、引数不正等の時は、-1 を返します。
注意: 本関数は、Windows95 系では正常に動作しないかもしれません。
用例:
if( ::File.IsExecutable( "TestProgram.exe" ) ) ...
GetNamePart 関数 -- ファイルのフルパス名の各部分抽出
書式: ::File.GetNamePart( <ファイル名>, <フォルダ名>, <主要名>, <拡張子名> )
機能: 指定ファイル(あるいはディレクトリ)のフルパス名の各構成部分の名前を
取得します。
説明: <ファイル名> は、対象のファイルを指定します。
<フォルダ名> は、対象ファイルが格納されているフォルダのフルパス名を
格納する箱を指定します。
<主要名> は、対象ファイルのファイル名のうち、拡張子を除いた部分の
名前を格納する箱を指定します。
<拡張子名> は、対象ファイルのファイル名のうち、ピリオッド以降の拡張子
の名前を格納する箱を指定します。
補説: 上記の各名前を格納する箱を指定する引数が、省略または不正の時、その
部分の名前は取得されません。
なお、その各箱は、本関数が作成するわけではないので、コール側で事前に
作成しておく必要があります。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
注意: <ファイル名> が相対パスの場合、カレントパスを基準にフルパスを構成して、
各部分名を抽出します。
本関数は、対象のファイルが不在の場合でも、通常に動作します。
用例: 例えば、カレントパスが "D:\Data\Photos" の時、
::File.GetNamePart( "Fig034.jpg", DN'new!, FN'new!, XN'new! );
print DN, FN, XN;
を実行すると、次のようにプリントされます。
D:\Data\Photos\, Fig034, .jpg
GetProgramPath 関数 -- 本実行プログラムのパスを取得
書式: ::File.GetProgramPath()
機能: 本実行プログラムのファイルのフルパス名を返します。
用例:
print ::File.GetProgramPath();
■ファイルリスト
ある特定のディレクトリ内にあるファイル群を列挙するには、その全部をまとめて
一気に行なうのではなく、該当するファイルを1つずつ順に列挙していきます。その
概要は、次のようになります。
(1)まず、::File.ListOpen() で、列挙対象のファイルを規定します。すると、
この関数は、それに該当する最初のファイルの情報が入ったファイルリスト
クラスのインスタンスを返します。
(2)次に、このインスタンスに対して、.ListNext() というメンバー関数を
呼び出すと、その中身が、その次のファイルの情報に変わります。
(3)以降、(2)の操作を次のファイルが無くなるまで、繰り返します。
(4)最後に、そのインスタンスを破棄します。
ListOpen 関数 -- ファイルリストを開く
書式: ::File.ListOpen( <ファイル名> )
機能: ファイルリストを開き、最初のファイルの情報が入ったインスタンスを
返します。
説明: <ファイル名> は、ファイルリストの対象になるファイル名を指定します。
この指定には、ワイルドカードが使用できます。
この <ファイル名> に、パスを付けても構いませんが、そのパス名には、
ワイルドカードは使用できません。
<ファイル名> を省略すると、カレントディレクトリの全ファイルが対象に
なります。
返値: ファイルリストクラスのインスタンスを返します。このインスタンスは、
複合箱で、その中には、最初のファイルの情報が入っています。
具体的には、以下の名前と中身の各箱が入っています。
Handle ファイルリスト管理ハンドル
Name ファイル名(文字列)
Size ファイルサイズ(整数値)
AttrCode 属性コード(整数値)
CreationTime 作成日時(文字列)
LastAccessTime 最終使用日時(文字列)
LastWriteTime 最終書込日時(文字列)
補説: このインスタンスの複合箱は、以下のメンバー関数にアクセスできます。
IsReadOnly() 読み出し専用か否かの真偽値を返す
IsDirectory() ディレクトリか否かの真偽値を返す
IsExecutable() 実行可能か否かの真偽値を返す
注意: <ファイル名> が不正等でエラーになった時や、該当ファイルが無い時には、
返値は null になります。
用例: 下記のスクリプトは、カレントディレクトリ内にある拡張子が .mc の
ファイルを全て列挙します。
FileList = ::File.ListOpen( "*.mc" );
if( FileList == null )
'Error!( ::ErrorMessage( $err_code, $err_info ), "\n" );
do // 各ファイルの「更新日時 サイズ ファイル名」を1行に表示
{ // ( ディレクトリの場合、サイズ欄に <dir> と表示 )
size = ( FileList.IsDirectory() ? "<dir>" : FileList.Size'd );
print FileList.LastWriteTime : " " :
size's(8) : " " :
FileList.Name;
} while( FileList.ListNext() );
delete FileList;
ListNext 関数 -- ファイルリストを次のファイル情報に更新
書式: FileList.ListNext()
機能: 対象のファイルリストのインスタンス FileList に対して、次のファイル
の情報に更新します。
説明: その情報は、上記の ::File.ListOpen() 関数の場合と、同様です。
返値: ファイルリストの次のファイルの情報を正常に設定した時は、真値(1) を
返します。次のファイルが無いかエラーの時は、偽値(0) を返します。
用例: ( ::File.ListOpen の用例参照 )
ListClose 関数 -- ファイルリストを閉じる
書式: FileList.ListClose()
機能: 対象のファイルリストのインスタンス FileList を閉じます。
説明: 本関数実行後、FileList 内は空になります。
返値: 正常終了時は、真値(1)、エラー終了時は、偽値(0) になります。
用例:
FileList.ListClose();
ファイルリストインスタンスの破棄
ファイルリストのインスタンスは、他のオブジェクトの場合と同様に、delete 文
で、明示的に破棄できます。また、それが含まれているスコープが無くなる時に、
自動的(暗黙的)に破棄されます。ファイルリストのインスタンスが破棄されると、
そのファイルリストは自動的(強制的)に閉じられます。そのため、ファイルリスト
のインスタンスを、.ListClose() しないまま破棄しても大丈夫です。