Kuina-chan

くいなちゃん2018年12月11日


プログラミング言語Kuin」の言語仕様102、「fileライブラリ」についてです。

1fileライブラリ

Kuinに標準的に用意されているライブラリのうち、ファイルやディレクトリを操作するライブラリ「file.kn」を解説します。
ファイルパスに使うディレクトリの区切り文字は「\」ではなく「/」を使い、ファイルではなくディレクトリを表す場合は末尾に「/」を付けてください。
名前 説明
file@Origin ファイルシーク時の基点を表す列挙型
file@Reader ファイル読み込みクラス
file@Reader.delimiter 読み込み時の区切り文字を設定するメソッド
file@Reader.fileSize ファイルサイズを取得するメソッド
file@Reader.fin ファイル読み込みを閉じるメソッド
file@Reader.getPos 読み込み位置を取得するメソッド
file@Reader.read データをバイナリで読み込むメソッド
file@Reader.readChar データを文字として読み込むメソッド
file@Reader.readFloat データを小数として読み込むメソッド
file@Reader.readInt データを整数として読み込むメソッド
file@Reader.readLetter 区切り文字を無視して1文字読み込むメソッド
file@Reader.readLine 区切り文字を無視して1行読み込むメソッド
file@Reader.readStr データを文字列として読み込むメソッド
file@Reader.setPos 読み込み位置を設定するメソッド
file@Reader.term ファイル終端かどうかを取得するメソッド
file@SysDir 特殊なディレクトリを表す列挙型
file@Writer ファイル書き込みクラス
file@Writer.fin ファイル書き込みを閉じるメソッド
file@Writer.getPos 書き込み位置を取得するメソッド
file@Writer.setPos 書き込み位置を設定するメソッド
file@Writer.write データにバイナリを書き込むメソッド
file@Writer.writeChar データに文字を書き込むメソッド
file@Writer.writeFloat データに小数を書き込むメソッド
file@Writer.writeInt データに整数を書き込むメソッド
file@Writer.writeStr データに文字列を書き込むメソッド
file@copyDir ディレクトリをコピーする関数
file@copyFile ファイルをコピーする関数
file@delDir ディレクトリを削除する関数
file@delExt ファイルパスから拡張子を削除する関数
file@delFile ファイルを削除する関数
file@dir ファイルパスからディレクトリを抜き出す関数
file@exeDir 自身の実行ファイルがあるディレクトリを取得する関数
file@exist ファイルやディレクトリが存在するかどうかを取得する関数
file@ext ファイルパスから拡張子を抜き出す関数
file@fileName ファイルパスからファイル名を抜き出す関数
file@fileSize ファイルサイズを取得する関数
file@forEach ファイルやディレクトリを列挙する関数
file@fullPath パスをフルパスに変換する関数
file@getCurDir カレントディレクトリを取得する関数
file@makeDir ディレクトリを作成する関数
file@makeReader ファイル読み込みクラスのインスタンスを生成する関数
file@makeWriter ファイル書き込みクラスのインスタンスを生成する関数
file@moveDir ディレクトリを移動する関数
file@moveFile ファイルを移動する関数
file@setCurDir カレントディレクトリを設定する関数
file@sysDir 特殊なディレクトリのパスを取得する関数

2file@Origin

「file@Origin」は、ファイルシーク時の基点を表す列挙型です。
名前 説明
%cur 現在位置
%head ファイルの先頭
%tail ファイルの末尾を1byte超えた地点。 つまり、ファイルの先頭からファイルサイズ分を足した地点

3file@Reader

「file@Reader」は、ファイル読み込みクラスです。

3.1file@Reader.delimiter



「file@Reader.delimiter」は、読み込み時の区切り文字を設定するメソッドです。

func delimiter(delimiters: []char)

delimiters 区切り文字を格納した配列
file@Readerクラスのインスタンスが生成されたときに、区切り文字は改行と半角スペースとカンマ(['\n', ' ', ','])に設定されています。
表3-1: file@Reader.delimiterの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

3.2file@Reader.fileSize



「file@Reader.fileSize」は、ファイルサイズを取得するメソッドです。

func fileSize(): int

戻り値 ファイルサイズ[byte]
表3-2: file@Reader.fileSizeの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

3.3file@Reader.fin



「file@Reader.fin」は、ファイル読み込みを閉じるメソッドです。

func fin()

既にファイルが閉じられているとき、このメソッドは何もしません。
ファイルはfile@Readerクラスのインスタンスが解放されるときに自動で閉じられます。 このメソッドは、閉じるタイミングを明示的に制御したいときにお使いください。

3.4file@Reader.getPos



「file@Reader.getPos」は、読み込み位置を取得するメソッドです。

func getPos(): int

戻り値 読み込み位置[byte]
表3-3: file@Reader.getPosの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

3.5file@Reader.read



「file@Reader.read」は、データをバイナリで読み込むメソッドです。

func read(size: int): []bit8

size 読み込むデータのサイズ[byte]
戻り値 読み込んだデータ
表3-4: file@Reader.readの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
データの残りサイズがsizeで指定した値よりも小さい dbg、rls E9170008

3.6file@Reader.readChar



「file@Reader.readChar」は、データを文字として読み込むメソッドです。

func readChar(): char

戻り値 読み込んだデータ
表3-5: file@Reader.readCharの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
読み込み位置にcharのデータが存在しない dbg、rls E9170008
  • このメソッドは、読み込み位置から区切り文字を読み飛ばして、区切り文字以外のデータを文字として読み込んだあと、再度区切り文字を読み飛ばしてからメソッドを抜ける。
図3-1: file@Reader.readCharの仕様

3.7file@Reader.readFloat



「file@Reader.readFloat」は、データを小数として読み込むメソッドです。

func readFloat(): float

戻り値 読み込んだデータ
表3-6: file@Reader.readFloatの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
読み込み位置にfloatのデータが存在しない dbg、rls E9170008
  • このメソッドは、読み込み位置から区切り文字を読み飛ばして、区切り文字以外のデータを小数として読み込んだあと、再度区切り文字を読み飛ばしてからメソッドを抜ける。
図3-2: file@Reader.readFloatの仕様

3.8file@Reader.readInt



「file@Reader.readInt」は、データを整数として読み込むメソッドです。

func readInt(): int

戻り値 読み込んだデータ
表3-7: file@Reader.readIntの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
読み込み位置にintのデータが存在しない dbg、rls E9170008
  • このメソッドは、読み込み位置から区切り文字を読み飛ばして、区切り文字以外のデータを整数として読み込んだあと、再度区切り文字を読み飛ばしてからメソッドを抜ける。
図3-3: file@Reader.readIntの仕様

3.9file@Reader.readLetter



「file@Reader.readLetter」は、区切り文字を無視して1文字読み込むメソッドです。

func readLetter(): char

戻り値 読み込んだデータ
このメソッドは、区切り文字の仕組みを使わず、1文字ずつ厳密に処理したい場合に便利です。
表3-8: file@Reader.readLetterの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
読み込み位置にこれ以上データが存在しない dbg、rls E9170008

3.10file@Reader.readLine



「file@Reader.readLine」は、区切り文字を無視して1行読み込むメソッドです。

func readLine(): []char

戻り値 読み込んだデータ
このメソッドは、区切り文字の仕組みを使わず、1行ずつ厳密に処理したい場合に便利です。
表3-9: file@Reader.readLineの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
読み込み位置にこれ以上データが存在しない dbg、rls E9170008

3.11file@Reader.readStr



「file@Reader.readStr」は、データを文字列として読み込むメソッドです。

func readStr(): []char

戻り値 読み込んだデータ
表3-10: file@Reader.readStrの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A
読み込み位置に[]charのデータが存在しない dbg、rls E9170008
  • このメソッドは、読み込み位置から区切り文字を読み飛ばして、区切り文字以外のデータを文字列として読み込んだあと、再度区切り文字を読み飛ばしてからメソッドを抜ける。
図3-4: file@Reader.readStrの仕様

3.12file@Reader.setPos



「file@Reader.setPos」は、読み込み位置を設定するメソッドです。

func setPos(origin: file@Origin, pos: int)

origin 読み込み位置の基点
pos 読み込み位置[byte]
originを基点として、posの値だけ増減させた位置へ移動します。 例えば、現在の読み込み位置から4byte戻す場合はoriginに「%cur」、posに「-4」を渡します。
ファイルの終端よりも後ろに移動した場合は例外は発生しません。 その位置でデータを読み込んだ場合はファイル終端と同等に扱われます。
表3-11: file@Reader.setPosの例外
発生条件 ビルド 例外コード
(16進数)
originの値が有効範囲外 dbgのみ E9170006
ファイルの先頭よりも前へ移動した dbgのみ E9170006
ファイルが閉じられている dbgのみ E917000A

3.13file@Reader.term



「file@Reader.term」は、ファイル終端かどうかを取得するメソッドです。

func term(): bool

戻り値 読み込み位置がファイル終端ならtrue、まだ読み込めるデータが残っているならfalse
表3-12: file@Reader.termの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

4file@SysDir

「file@SysDir」は、特殊なディレクトリを表す列挙型です。
名前 説明
%appData アプリケーションデータ "C:/Users/Kuina/AppData/Roaming/"
%desktop デスクトップ "C:/Users/Kuina/Desktop/"
%fonts フォント "C:/Windows/Fonts/"
%programFiles ProgramFiles "C:/Program Files/"
%system32 System32 "C:/Windows/System32/"
%windows Windowsディレクトリ "C:/Windows/"

5file@Writer

「file@Writer」は、ファイル書き込みクラスです。

5.1file@Writer.fin



「file@Writer.fin」は、ファイル書き込みを閉じるメソッドです。

func fin()

既にファイルが閉じられているとき、このメソッドは何もしません。
ファイルはfile@Writerクラスのインスタンスが解放されるときに自動で閉じられます。 このメソッドは、閉じるタイミングを明示的に制御したいときにお使いください。

5.2file@Writer.getPos



「file@Writer.getPos」は、書き込み位置を取得するメソッドです。

func getPos(): int

戻り値 書き込み位置[byte]
表5-1: file@Writer.getPosの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

5.3file@Writer.setPos



「file@Writer.setPos」は、書き込み位置を設定するメソッドです。

func setPos(origin: file@Origin, pos: int)

origin 書き込み位置の基点
pos 書き込み位置[byte]
originを基点として、posの値だけ増減させた位置へ移動します。 例えば、現在の書き込み位置から4byte戻す場合はoriginに「%cur」、posに「-4」を渡します。
ファイルの終端よりも後ろに移動した場合は例外は発生しません。 その位置でデータを書き込んだ場合は、ファイル終端からそこまでの隙間が自動的に0で埋められます。
表5-2: file@Writer.setPosの例外
発生条件 ビルド 例外コード
(16進数)
originの値が有効範囲外 dbgのみ E9170006
ファイルの先頭よりも前へ移動した dbgのみ E9170006
ファイルが閉じられている dbgのみ E917000A

5.4file@Writer.write



「file@Writer.write」は、データにバイナリを書き込むメソッドです。

func write(bin: []bit8)

bin 書き込むデータ
表5-3: file@Writer.writeの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

5.5file@Writer.writeChar



「file@Writer.writeChar」は、データに文字を書き込むメソッドです。

func writeChar(n: char)

n 書き込むデータ
表5-4: file@Writer.writeCharの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

5.6file@Writer.writeFloat



「file@Writer.writeFloat」は、データに小数を書き込むメソッドです。

func writeFloat(n: float)

n 書き込むデータ
表5-5: file@Writer.writeFloatの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

5.7file@Writer.writeInt



「file@Writer.writeInt」は、データに整数を書き込むメソッドです。

func writeInt(n: int)

n 書き込むデータ
表5-6: file@Writer.writeIntの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

5.8file@Writer.writeStr



「file@Writer.writeStr」は、データに文字列を書き込むメソッドです。

func writeStr(n: []char)

n 書き込むデータ。 nullであってはならない
表5-7: file@Writer.writeStrの例外
発生条件 ビルド 例外コード
(16進数)
ファイルが閉じられている dbgのみ E917000A

6file@copyDir

「file@copyDir」は、ディレクトリをコピーする関数です。

func copyDir(dst: []char, src: []char): bool

dst コピー先のディレクトリのパス
src コピー元のディレクトリのパス
戻り値 コピーに成功したらtrue、失敗したらfalse
中身のサブディレクトリやファイルもすべてコピーされます。

7file@copyFile

「file@copyFile」は、ファイルをコピーする関数です。

func copyFile(dst: []char, src: []char): bool

dst コピー先のファイルのパス
src コピー元のファイルのパス
戻り値 コピーに成功したらtrue、失敗したらfalse

8file@delDir

「file@delDir」は、ディレクトリを削除する関数です。

func delDir(path: []char): bool

path 削除するディレクトリのパス
戻り値 削除に成功したらtrue、失敗したらfalse
中身のサブディレクトリやファイルもすべて削除されます。
対象のディレクトリが存在しない場合は何もせずにtrueを返します。

9file@delExt

「file@delExt」は、ファイルパスから拡張子を削除する関数です。

func delExt(path: []char): []char

path ファイルパス
戻り値 拡張子を削除したファイルパス
例えば「"a/b/c.txt"」を渡すと、「"a/b/c"」が返ります。
pathに拡張子が含まれていなかった場合は、pathがそのまま返ります。

10file@delFile

「file@delFile」は、ファイルを削除する関数です。

func delFile(path: []char): bool

path 削除するファイルのパス
戻り値 削除に成功したらtrue、失敗したらfalse
対象のファイルが存在しない場合は何もせずにtrueを返します。

11file@dir

「file@dir」は、ファイルパスからディレクトリを抜き出す関数です。

func dir(path: []char): []char

path ファイルパス
戻り値 ディレクトリを抜き出したファイルパス
例えば「"a/b/c.txt"」を渡すと、「"a/b/"」が返ります。 「"example.txt"」のようにディレクトリ区切り文字を含まないパスを渡すと「"./"」が返ります。

12file@exeDir

「file@exeDir」は、自身の実行ファイルがあるディレクトリを取得する関数です。

func exeDir(): []char

戻り値 自身の実行ファイルがあるディレクトリのファイルパス

13file@exist

「file@exist」は、ファイルやディレクトリが存在するかどうかを取得する関数です。

func exist(path: []char): bool

path ファイルやディレクトリのパス
戻り値 ファイルやディレクトリが存在したらtrue、しなければfalse

14file@ext

「file@ext」は、ファイルパスから拡張子を抜き出す関数です。

func ext(path: []char): []char

path ファイルパス
戻り値 抜き出した拡張子
例えば「"a/b/c.txt"」を渡すと、「"txt"」が返ります。

15file@fileName

「file@fileName」は、ファイルパスからファイル名を抜き出す関数です。

func fileName(path: []char): []char

path ファイルパス
戻り値 抜き出したファイル名
例えば「"a/b/c.txt"」を渡すと、「"c.txt"」が返ります。

16file@fileSize

「file@fileSize」は、ファイルサイズを取得する関数です。

func fileSize(path: []char): int

path サイズを取得するファイルのパス
戻り値 ファイルサイズ[byte]
表16-1: file@fileSizeの例外
発生条件 ビルド 例外コード
(16進数)
ファイルの読み込みに失敗 dbg、rls E9170007

17file@forEach

「file@forEach」は、ファイルやディレクトリを列挙する関数です。

func forEach(path: []char, recursion: bool, callback: func<([]char, bool, kuin@Class): bool>, data: kuin@Class): bool

path ディレクトリのパス
recursion ディレクトリを再帰的に走査するならtrue、しないならfalse
callback コールバック関数
data コールバック関数に渡される任意のデータ
戻り値 最後まで列挙したらtrue、中断したりエラーが発生したらfalse
ファイルやディレクトリが見つかるたび、callbackが呼ばれます。 callbackの引数にはそれぞれ「ファイルやディレクトリのパス」「ディレクトリならtrue、ファイルならfalse」「dataの値」が渡ります。
callbackにはpathのディレクトリ自身も渡ります。 callbackの戻り値がtrueなら走査を続行し、falseなら中断します。
recursionがtrueの場合、ディレクトリを再帰的に走査してすべてのファイルとディレクトリを列挙します。 recursionがfalseの場合、path内の階層にあるファイルだけを列挙して抜けます。

18file@fullPath

「file@fullPath」は、パスをフルパスに変換する関数です。

func fullPath(path: []char): []char

path ファイルパスもしくはディレクトリパス
戻り値 フルパス
相対パスがあり得るパスを、絶対パスに揃えたいときに使います。

19file@getCurDir

「file@getCurDir」は、カレントディレクトリを取得する関数です。

func getCurDir(): []char

戻り値 カレントディレクトリのパス

20file@makeDir

「file@makeDir」は、ディレクトリを作成する関数です。

func makeDir(path: []char): bool

path 作成するディレクトリのパス
戻り値 作成に成功したらtrue、失敗したらfalse
「a/b/c/」としたとき、「b」と「c」のディレクトリが存在しない場合には「b」も「c」も作成されます。
またディレクトリの中身は空になります。 「a/b/c/」としたとき、「b」と「c」のディレクトリが既に存在していた場合、「b」はそのままで、「c」の中身のサブディレクトリやファイルをすべて削除してから新たに作成します。
表20-1: file@makeDirの例外
発生条件 ビルド 例外コード
(16進数)
pathが260文字を超える dbgのみ E9170006

21file@makeReader

「file@makeReader」は、ファイル読み込みクラスのインスタンスを生成する関数です。

func makeReader(path: []char): file@Reader

path 読み込むファイル
戻り値 ファイル読み込みクラスのインスタンス

22file@makeWriter

「file@makeWriter」は、ファイル書き込みクラスのインスタンスを生成する関数です。

func makeWriter(path: []char, append: bool): file@Writer

path 書き込むファイル
append 既にファイルが存在したとき、falseを指定すると内容が消去されて新規ファイルとして書き込まれ、trueを指定すると既存の内容の末尾に追記される
戻り値 ファイル書き込みクラスのインスタンス

23file@moveDir

「file@moveDir」は、ディレクトリを移動する関数です。

func moveDir(dst: []char, src: []char): bool

dst 移動先のディレクトリのパス
src 移動元のディレクトリのパス
戻り値 移動に成功したらtrue、失敗したらfalse

24file@moveFile

「file@moveFile」は、ファイルを移動する関数です。

func moveFile(dst: []char, src: []char): bool

dst 移動先のファイルのパス
src 移動元のファイルのパス
戻り値 移動に成功したらtrue、失敗したらfalse

25file@setCurDir

「file@setCurDir」は、カレントディレクトリを設定する関数です。

func setCurDir(path: []char)

path カレントディレクトリのパス

26file@sysDir

「file@sysDir」は、特殊なディレクトリのパスを取得する関数です。

func sysDir(kind: file@SysDir): bool

kind 特殊なディレクトリ
戻り値 取得したパス
1544535121jaf