ファイル操作系組み込み関数の変更点および新規に追加された関数の解説です。
変更
fopen
fopenの戻り値が数値ではなくなりました。代わりにファイルIDオブジェクトを返します。
以下のような記述はできなくなりました。
fopen("hoge.txt")
fget(1, 1)
F_APPEND
の追加
F_APPEND
を指定するとテキストファイルの末尾に追記を行います。この場合第三引数に書き込みたい文字列を渡します。
fopen("hoge.txt", F_APPEND, "書き込む文字列")
ファイルIDオブジェクト消失時のファイルクローズ
ファイルIDを保持する変数がなくなった場合、そのファイルは自動でクローズされます。
fid = fopen("fopen.txt", F_WRITE)
fput(fid, "てすと")
fid = EMPTY // この時点でファイルがクローズされ変更が反映される
これにより以下のような記述が可能になりました。
fput(fopen("fopen.txt", F_WRITE), "べこべこ")
// 1. 第一引数評価時にファイルを開きファイルIDを返す
// 2. fputが対象ファイルに書き込みを行う
// 3. fput実行後にファイルIDが保持されていないため自動クローズされる
また、fcloseの呼び忘れなどでファイルをクローズしていなくてもスクリプト終了時にも自動クローズされます。
ファイルIDオブジェクトのデストラクタ(のようなもの)でファイルクローズ処理を行っています。
iniファイル関連
ファイルIDによるiniファイルの読み書き
iniファイル操作系関数にファイル名を渡す代わりにファイルIDを渡すことができるようになりました。
inifile = "test.ini"
// ファイル名を指定した場合は都度ファイルをオープン/クローズする
writeini("filename", "foo", 1, inifile)
// iniファイルをfopenする
// 排他制御もできる
fid = fopen(inifile, F_WRITE or F_READ or F_EXCLUSIVE)
writeini("fid", "foo", 1, fid)
writeini("fid", "bar", 2, fid)
writeini("fid", "baz", 3, fid)
// fclose時に変更を反映
fclose(fid)
- readiniには
F_READ
が必要です - writeiniには
F_WRITE
が必要です- 追記の場合は
F_WRITE or F_READ
にします
- 追記の場合は
- deleteiniには
F_WRITE or F_READ
が必要です
readiniによるセクションおよびキー一覧の取得
iniファイルのセクション一覧およびセクション内のキー一覧を取得できるようになりました。
readiniの第一引数(セクション名)を省略すると対象iniファイルのセクション一覧を配列で返します。セクション名を指定し第二引数(キー名)を省略すると対象セクションのキー名一覧を配列で返します。
[hoge]
foo=1
bar=2
baz=3
[fuga]
foo=1
[piyo]
bar=2
inifile = "test.ini"
// セクション名省略でセクション一覧を得る
print readini(, , inifile)
// [hoge, fuga, piyo]
// キー名省略でキー一覧を得る
print readini("hoge", , inifile)
// [foo, bar, baz]
getdir
破壊的変更があります。
関数の戻り値が取得されたファイル名の配列となり、それに伴いGETDIR_FILES
特殊配列変数は廃止されました。
新規
zipファイル
zipファイルを扱えるようになりました。
パスワード付きzipファイルは未対応です。
zip
作成するzipファイル名とzipに含めたいファイルパスを指定し、zip圧縮します。
// 3つのファイルをzipファイルに圧縮する
zip('test.zip', 'foo.txt', 'bar.txt', 'baz.txt')
files = [
'qux.txt',
'quux.txt',
'corge.txt'
]
// 配列も可
zip('test2.zip', files)
unzip
zipファイルを任意のフォルダに展開します。展開先フォルダが存在しない場合は新規に作成されます。
unzip('test.zip', 'test')
for file in getdir('test')
print file
next
// foo.txt
// bar.txt
// baz.txt
zipitems
zipファイルに含まれるファイル一覧を得ます。
for file in zipitems("test2.zip")
print file
next
// qux.txt
// quux.txt
// corge.txt