空いていて使えるファイル番号を返します。
構文:
用法:
result = Freefile
戻り値:
もしあれば、次の利用可能なファイル番号、そうでなければゼロ (0)。
記述:
次の空きファイル番号を、
1 〜
255 の有効な値として返します。
すでに 255個のファイルが開いている場合は
0 を返します。
この値は、ファイルを
Open するために必要な引数です。
Freefile は、プログラマーが、使っているファイル番号の経過を追うことができない複雑なプログラムで、ファイルを開くときに役立ちます。
もはやファイルが必要なくなったとき、必ずファイルを閉じてください。そうしないと、ファイル番号がリークして、プログラムの実行中に 255個のファイル番号を使い切って、新たにファイルを開くことができなくなります。
Freefile は、常に最小の空きファイル番号を返します。
Freefile によって返されるファイル番号は、そのファイル番号が
Open されるか、またはその番号より小さいファイル番号が
Close されるまで変わりません:
-
このため、
Freefile を、対応する
Open の直前に使って、同じファイル番号が返され、他の場所で先に開かれないようにすることを推奨します。
-
他のスレッドと衝突する可能性がある場合、このブレークしない '
Freefile...Open' シーケンスは、コードの重要なセクションと見なす必要があるため、たとえば相互排除(ミューテックスロックを使用)によって保護する必要があります。
例:
'文字列変数を作って、文字を入れます。
Dim buffer As String, f As Long
buffer = "今日は世界! テキスト・ファイルを見てね。Freefile"
' 最初の使えるファイル番号を見つけます
f = FreeFile
'ファイル番号「f」を使って、2進の用法で、"file.txt"というファイルを開きます。
Open "file.txt" For Binary As #f
' ファイル番号「f」を使って、文字列をファイルに置きます。
Put #f, , buffer
' ファイルを閉じます。
Close #f
' プログラムを終了させます。
' (プログラムを実行した後、プログラムと同じフォルダで、"file.txt" の内容を確認して下さい。)
End
複数の
Freefile 命令文を使うとき、
Freefile は、
Open 命令文の直前に使わなければなりません。
ファイルを開いた結果につれて、使えるファイル番号が移るからです。
Dim As Long fr, fs
' 正しい方法:
fr = FreeFile
Open "File1" For Input As #fr
fs = FreeFile
Open "File2" For Input As #fs
上と対照して:
Dim As Long fr, fs
' 間違った方法:
fr = FreeFile
fs = FreeFile '' fs は fr と同じファイル番号を取得している
Open "file1" For Input As #fr
Open "file2" For Input As #fs '' error: すでに開いているファイル番号
プラットホーム差:
-
Windowsでは、ダイナミックリンクライブラリに使われるファイル番号は、主プログラムで使われるファイル番号と同じではありません。
ファイル番号は、DLLと実行ファイルの間で、渡したり、返すことができません。
-
FreeBASIC の同時に開けるプログラム当たり 255 ファイルの限界に加えて、OS の開かれたファイルの総量の限界があります。
しかし、通常、DOS 以外では考慮しなくてよいでしょう。DOS では、制限は、合計 15 ファイルの少なさである場合があります。
QBからの違い:
参照: