ファイル操作 - stuncloud/UWSCR GitHub Wiki
対応バージョン: 0.6.0
戻り値 = fopen(ファイルパス, モード = F_READ, 追記文字列 = EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ファイルパス | 文字列 | 必須 | テキストファイルのパス | 
| 書き込みモードでファイルが存在しない場合は新規作成される | |||
| モード | 定数 | 省略可 | ファイルモード定数、orによる組み合わせあり | 
| 追記文字列 | 文字列 | 省略可(条件付きで必須) | F_APPENDで書き込む文字列 (それ以外では無視) | 
| 戻り値 | ファイルID | 戻り値 | ファイルを識別するための特殊な値 | 
| 真偽値 | F_EXISTSの場合指定パスが存在すればTRUE | ||
| 数値 | F_APPENDで書き込んだバイト数 | 
- 
ファイルモード定数 定数名 値 役割 F_EXISTS 1 パスの存在確認 (ディレクトリの場合は末尾に \を付ける)ファイルオープン定数 ファイルオープン方法を指定する F_READ 2 ファイルを読む (SJIS、UTF8、UTF16対応) F_WRITE 4 単一指定ではファイルを上書きする (UTF-8) F_READと併記した場合(F_READ or F_WRITE)は元のファイルのエンコーディングを維持F_WRITE1 8 SJISで書き込む F_WRITE8 16 UTF-8で書き込む F_WRITE8B 32 BOM付きUTF-8で書き込む F_WRITE16 64 UTF-16LEで書き込む いずれも F_READと併記した場合はエンコーディングを変更するF_APPEND 1024 文末追記モード、 F_WRITE系と併記でエンコーディング指定F_WRITEとF_WRITE8BはUTF-8になりますオプション定数 適用する場合はファイルオープン定数にor連結する F_NOCR 128 文末に改行を入れない F_TAB 256 CSVセパレータをカンマではなくタブ文字にする F_EXCLUSIVE 512 排他モードでファイルを開く 
// 読み取り
fid = fopen(path) // fopen(path, F_READ) と同等
print fget(fid, 1)
fclose(fid)
// 書き込み
fid = fopen(path, F_WRITE)
fput(fid, text)
fclose(fid) // 上書きされる
// 読み書き
fid = fopen(path, F_READ or F_WRITE)
print fget(fid, 1)
fput(fid, text)
fclose(fid) // 編集して保存
// エンコーディングを変更して保存
fid = fopen(path, F_WRITE1) // SJISでファイルを書き込み
fput(fid, text1)
fclose(fid)
fid = fopen(path, F_READ or F_WRITE16)
fput(fid, text2)
fclose(fid) // 編集してUTF-16で保存
// 追記
fopen(path, F_APPEND or F_WRITE16, text) // UTF-16で末尾に追記
fopen(path, F_APPEND) // エラー; F_APPEND指定時は第三引数が必須
// 自動ファイルクローズ
print fget(fopen(path, F_READ), F_ALLTEXT)
// ファイル識別子を変数に代入しなかった場合は読み書き関数実行後に自動でファイルが閉じられます対応バージョン: 0.6.0
fopenで開いたファイルの内容を読み取ります
fopenの際にF_READをモードに指定する必要があります
文字列 = fget(ファイルID, 行, 列=0, ダブルクォート無視=FALSE)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ファイルID | ファイルID | 必須 | fopenが返したファイルID | 
| 行 | 数値 | 必須 | 読み取る行番号 | 
| 列 | 数値 | 省略可 | 読み取るcsv列 | 
| 0で行全体を読み取る (デフォルト) | |||
| ダブルクォート無視 | 真偽値 | 省略可 | csv列読み取り時(列が1以上の場合)のみ有効 | 
| TRUEならダブルクォートを無視する | |||
| FALSEならダブルクォート内を値と見なす | |||
| FALSE時 "は エスケープが必要"" | |||
| "fo""o","bar","baz"はfo"o,bar,bazと同じ | 
fid = fopen("test.csv", F_READ)
print fget(fid, 1) // foo,bar,baz
print fget(fid, 1, 1) // foo
// 前後のホワイトスペースはトリムされる
print fget(fid, 2, 1) // 「    foo   」にはならず「foo」が返る
// ダブルクォートで括られたカラム
print fget(fid, 3, 1, FALSE) // ダブルクォートありのカラム
print fget(fid, 3, 1, TRUE)  // "ダブルクォートありのカラム"
// 第4引数FALSEはUWSCにおける 2 の動作が標準になりました
print fget(fid, 3, 2, FALSE) // ダブルクォートの"エスケープ"
print fget(fid, 3, 2, TRUE)  // "ダブルクォートの""エスケープ"""
// 改行を含むカラムのサポート
// 第4引数がFALSEかつ改行を含む文字列がダブルクォートで括られている場合のみ
print fget(fid, 4, 1, FALSE) // 改行を
                             // 含む
print fget(fid, 4, 2, FALSE) // ここはまだ4行目
fclose(fid)- 
test.csv foo,bar,baz foo , bar , baz "ダブルクォートありのカラム","ダブルクォートの""エスケープ""","" "改行を 含む","ここはまだ4行目"
対応バージョン: 0.6.0
fopenで開いたファイルに書き込みを行います
fopenの際にF_WRITE系をモードに指定する必要があります
fput(ファイルID, 値, 行=0, 列=0)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ファイルID | ファイルID | 必須 | fopenが返したファイルID | 
| 値 | 文字列 | 必須 | 書き込む値 | 
| 行 | 数値 | 省略可 | 0の場合文末に追記 | 
| 1以上の場合は指定行に書き込み | |||
| F_ALLTEXTの場合ファイル全体に上書き | |||
| 列 | 数値 | 省略可 | 0の場合行全体に書き込み | 
| 1以上の場合はcsvカラムとして書き込み | |||
| F_INSERTの場合指定行に挿入 | |||
| ( F_READがない場合F_INSERTは無視される) | 
対応バージョン: 0.6.0
ファイルの指定行を削除します
fopenの際にF_READおよびF_WRITE系をモードに指定する必要があります
fdelline(ファイルID, 行)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ファイルID | ファイルID | 必須 | fopenが返したファイルID | 
| 行 | 数値 | 必須 | 削除する行の番号 (1から) | 
| 存在しない行を指定した場合なにもしない | 
ファイルを閉じます
fputやfdellineによる書き込みはfclose()を呼ぶまで反映されません
成否 = fclose(ファイルID, エラー抑止=FALSE)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ファイルID | ファイルID | 必須 | fopenが返したファイルID | 
| エラー抑止 | 真偽値 | 省略可 | TRUEでエラーを無視する | 
| 成否 | 真偽値 | 戻り値 | ファイルが閉じられればTRUE | 
| エラー抑止がTRUEでエラーが発生した場合は必ずFALSEが返ります | 
対応バージョン: 0.6.0
iniファイルから値を読み出します
値 = readini(セクション=EMPTY, キー=EMPTY, ファイル=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| セクション | 文字列 | 省略可 | iniファイルのセクション名 | 
| EMPTY | セクション一覧を取得する場合 | ||
| キー | 文字列 | 省略可 | セクション内のキー名 | 
| EMPTY | キー一覧を取得する場合 | ||
| ファイル | 文字列 | iniファイルのパス | |
| EMPTY | "<#GET_UWSC_NAME>.ini"から読み出し | ||
| ファイルID | fopenが返したファイルID (要 F_READ) | ||
| 値 | 文字列 | 戻り値 | 該当キーの値 | 
| EMPTY | 該当キーがない、またはファイルがない・開けないなど | ||
| 配列 | セクションを省略した場合はセクションのリスト | ||
| 配列 | キー一覧を省略した場合はセクション内のキーのリスト | 
ini = 'test.ini'
print readini('foo', 'name', ini) // foo
// セクションを省略(またはEMPTY指定)するとセクション一覧を取得
print readini( , , ini) // [ section, foo, bar, baz ]
print readini( , 'name', ini) // ↑と同じ結果 (キーを渡しても無視される)
// セクションを指定してキーを省略(またはEMPTY指定)するとキー一覧を収録
print readini('section', , ini) // [ key1, key2, key3 ]
- 
test.ini [section] key1="あ" key2="い" key3="う" [foo] name="foo" [bar] name="bar" [baz] name="baz" 
対応バージョン: 0.6.0
iniファイルに値を書き出します
writeini(セクション, キー, 値, ファイル=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| セクション | 文字列 | 必須 | iniファイルのセクション名 | 
| キー | 文字列 | 必須 | セクション内のキー名 | 
| 値 | 文字列 | 必須 | 該当キーに書き込む値 | 
| ファイル | 文字列 | iniファイルのパス | |
| EMPTY | "<#GET_UWSC_NAME>.ini"へ書き込み | ||
| ファイルID | fopenが返したファイルID (要 F_WRITE) | ||
| 値を書き換える場合は F_READも必要 | |||
| ファイルIDを渡した場合fcloseするまで反映されません | 
対応バージョン: 0.6.0
該当キーまたはセクションを削除します
deleteini(セクション, キー=EMPTY, ファイル=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| セクション | 文字列 | 必須 | iniファイルのセクション名 | 
| キー | 文字列 | 省略可 | 削除するキー | 
| EMPTY | キー省略時はセクション全体が削除される | ||
| ファイル | 文字列 | iniファイルのパス | |
| EMPTY | "<#GET_UWSC_NAME>.ini"へ書き込み | ||
| ファイルID | fopenが返したファイルID (要 F_READ or F_WRITE) | ||
| ファイルIDを渡した場合fcloseするまで反映されません | 
iniファイルをfopenで開いて各INI関数で読み書きができます
各INI関数にファイルパスの代わりにfidを渡します
ini = fopen("hoge.ini", F_READ or F_WRITE)
// ファイルパスの代わりにfidを指定
print readini("hoge", "fuga", ini)        // 読む場合はF_READが必要
writeini("hoge", "fuga", "fugafuga", ini) // 書き込みにはF_READ or F_WRITEが必要
deleteini("hoge", "fuga", ini)            // 削除にもF_READ or F_WRITEが必要
fclose(ini) // iniファイルへの書き込みが反映される
以下のような用途を想定しています
- 一度に何度もINI系関数を呼ぶ場合にファイルを開いたままにしておきたい
- iniファイルへのアクセス中も排他制御(F_EXCLUSIVE)したい
対応バージョン: 0.6.0
指定したファイルを削除します
* によるワイルドカード指定も可能
結果 = deletefile(パス)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| パス | 文字列 | 必須 | 削除したいファイルのパス | 
| *を含めるとワイルドカードとなり該当する複数のファイルが削除される | |||
| 結果 | 真偽値 | 戻り値 | 削除に成功したらTRUE | 
| ファイルが存在しない、または削除時にエラーが生じた場合はFALSE | 
対応バージョン: 0.6.0
対象ディレクトリに含まれるファイルまたはディレクトリの一覧を取得します
リスト = getdir(ディレクトリ, フィルタ="*", 不可視フラグ=FALSE, 取得順=ORDERBY_NAME)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ディレクトリ | 文字列 | 必須 | 対象ディレクトリのパス | 
| フィルタ | 文字列 | 省略可 | ファイル名フィルタ、ワイルドカード( *,?)利用可 | 
| \を入れるとファイル一覧ではなくディレクトリ一覧を返す | |||
| 不可視フラグ | 真偽値 | 省略可 | 非表示ファイルを含めるかどうか、デフォルトは含めない( FALSE) | 
| 取得順 | 定数 | 省略可 | 取得順を示す定数 | 
| ORDERBY_NAME(0) ファイル名 | |||
| ORDERBY_SIZE(1) サイズ | |||
| ORDERBY_CREATED(2) 作成日時 | |||
| ORDERBY_MODIFIED(3) 更新日時 | |||
| ORDERBY_ACCESSED(4) 最終アクセス日時 | |||
| リスト | 配列 | 戻り値 | 該当するファイルまたはディレクトリの名前一覧 | 
| ※ GETDIR_FILESは廃止 | 
/*
    C:\test\
        foo1.txt
        foo2.txt
        bar.txt
        baz.txt
        hidden.txt (隠しファイル)
        dir1\
        dir2\
        folder1\
        folder2\
*/
// ファイル一覧の表示
print getdir('C:\test') // [foo1.txt, foo2.txt, bar.txt, baz.txt]
// ファイル名のフィルタ
print getdir('C:\test', 'foo*') // [foo1.txt, foo2.txt]
// 隠しファイルも表示
print getdir('C:\test', , TRUE) // [foo1.txt, foo2.txt, bar.txt, baz.txt, hidden.txt]
// フォルダ一覧の表示
print getdir('C:\test', '\') // [dir1, dir2, folder1, folder2]
// フォルダ一名のフィルタ
print getdir('C:\test', '\dir*') // [dir1, dir2]
対応バージョン: 未実装
対象ウィンドウにファイルをドロップします
dropfile(ウィンドウID, ディレクトリパス, ファイル名, [ファイル名, ファイル名, ...])
dropfile(ウィンドウID, x, y, ディレクトリパス, ファイル名, [ファイル名, ファイル名, ...])
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ウィンドウID | 数値 | 必須 | 対象ウィンドウのID | 
| x, y | 数値 | ドロップ位置の相対座標 (未指定時は中央) | |
| ディレクトリパス | 文字列 | 必須 | ドロップしたいファイルのあるディレクトリのパス | 
| ファイル名 | 文字列 | 必須 | ドロップするファイル名、10個まで指定可能 (x,y指定時は8個まで) | 
| 配列 | ファイル名を要素に持つ配列による指定も可能 | 
id = getid( , "CabinetWClass") // Explorer
dropfile(id, "C:\test", "foo.txt") // C:\test\foo.txtをドロップ
dropfile(id, "C:\test", "foo.txt", "bar.txt", "baz.txt") // 10個まで指定可能
dropfile(id, "C:\test", ["foo.txt", "bar.txt", "baz.txt"]) // 配列指定も可能
bmps = getdir("C:\test", "*.bmp")
dropfile(id, "C:\test", bmps) // getdirで得たファイル名を渡す
// 第二第三引数が数値なら対象ウィンドウの相対座標として扱いその位置へドロップする
dropfile(id, 100, 100, "C:\test", "foo.txt")対応バージョン: 0.6.0
zipファイルを新規に作成します
結果 = zip(zipファイル, ファイル, [ファイル, ...])
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| zipファイル | 文字列 | 必須 | zipファイルのパス | 
| ファイル | 文字列 | 必須 | zipファイルに含めたいファイルのパス | 
| 配列 | ファイルパスの配列 | ||
| 指定できる引数は10個まで (それ以上の場合は配列指定してください) | |||
| 結果 | 真偽値 | 戻り値 | 成功時TRUE | 
files = [
    'foo.uws',
    'bar.uws',
    'baz.uws',
    'modules\qux.uws',
    'modules\quux.uws'
]
zip("test.zip", files)対応バージョン: 0.6.0
zipファイルを指定フォルダに展開します
(パスワード付きzipファイルは非対応)
展開先フォルダが存在しない場合は作成されます
既に同名ファイルが存在する場合は上書きされます
結果 = unzip(zipファイル, 展開先)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| zipファイル | 文字列 | 必須 | zipファイルのパス | 
| 展開先 | 文字列 | 必須 | 展開先フォルダパス | 
| 結果 | 真偽値 | 戻り値 | 成功時はTRUE | 
| 失敗した場合でも一部のファイルが展開されることがあります | 
unzip("test.zip", "out")
for file in getdir("out")
    print file
next
for dir in getdir('out', '\')
    for file in getdir("out\<#dir>")
        print "<#dir>/<#file>"
    next
next
// foo.uws
// bar.uws
// baz.uws
// modules\qux.uws
// modules\quux.uws対応バージョン: 0.6.0
zipファイルに含まれるファイル一覧を取得します
(パスワード付きzipファイルでも取得可能)
ファイル一覧 = zipitems(zipファイル)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| zipファイル | 文字列 | 必須 | zipファイルのパス | 
| ファイル一覧 | 配列 | 戻り値 | ファイル一覧 | 
| フォルダの区切りは /です | 
for item in zipitems("test.zip")
    print item
next
// foo.uws
// bar.uws
// baz.uws
// modules/qux.uws
// modules/quux.uws