API > FS


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

このページでは FS API について解説する。

参考資料:
執筆時のバージョン:
  • ComputerCraft 1.55 for Minecraft 1.6.2




FS API

ファイルシステムに関する操作やファイルの入出力を行うAPI。

list

  • fs.list( path )
  • ディレクトリpath(文字列)にあるファイルやディレクトリの名前のリストを取得する
  • 戻り値:テーブル型。キーは1以上の整数、値はファイルやディレクトリの名前

ルートディレクトリを表すpathは""(長さ0文字列)。

例:
local FileList = fs.list( "" )
for _, file in ipairs( FileList ) do
  print( file )  -- Print the file name
end  -- End the loop
ルートディレクトリにあるファイルやディレクトリの名前のリストを取得し、それを一つずつ表示する。

exists

  • fs.exists( path )
  • パスpath(文字列)にファイルやディレクトリが存在するかを調べる
  • 戻り値:ブーリアン型。存在する場合はtrue、しない場合はfalse

例:
print( fs.exists( "rom" ) )
"rom"ディレクトリが存在するか調べ、結果を表示する("true"と表示される)。

isDir

  • fs.isDir( path )
  • パスpath(文字列)がディレクトリかどうかを調べる
  • 戻り値:ブーリアン型。ディレクトリの場合はtrue、存在しないかファイルの場合はfalse

例:
print( fs.isDir( "rom" ) )
"rom"がディレクトリかどうかを調べ、結果を表示する("true"と表示される)。

isReadOnly

  • fs.isReadOnly( path )
  • パスpath(文字列)が読み取り専用かどうかを調べる
  • 戻り値:ブーリアン型。読み取り専用の場合はtrue、存在しないか書き込み可能の場合はfalse

例:
print( fs.isReadOnly( "rom" ) )
"rom"が読み取り専用かどうかを調べ、結果を表示する("true"と表示される)。

getName

  • fs.getName( path )
  • パスpath(文字列)からファイルまたはディレクトリの名前部分を取得する
  • 戻り値:文字列型

pathに""(ルートディレクトリを表す)を指定した場合は"root"が返る。ただし、"root"はパスでルートディレクトリを表すのに使うことができない。

例:
print( fs.getName( "rom/apis/colors" ) )
パス"rom/apis/colors"の名前部分を取得し、結果を表示する("colors"と表示される)。

getDrive

  • fs.getDrive( path )
  • パスpath(文字列)からドライブ名を取得する
  • 戻り値:文字列型。ドライブ名。ただし、存在しない場合はnilが返る

pathがコンピュータ本体に保存されている場合は"hdd"が、romディレクトリ以下(実体はComputerCraftのzip内)の場合は"rom"が、フロッピーディスクの場合はディスクドライブの接続名(方向またはネットワーク名)が返る。

例:
print( fs.getDrive("rom/startup") )
"rom/startup"のドライブ名を取得し、結果を表示する("rom"と表示される)。

getSize

  • fs.getSize( path )
  • パスpath(文字列)のファイルのサイズを取得する
  • 戻り値:数値型。サイズがバイト単位で返る

pathがディレクトリの場合は0が返る。また、存在しない場合はエラーになる。
ディスクスペースの計算では、ディレクトリ(ルートディレクトリを含む)やサイズが512バイト未満のファイルは、実際に返るサイズと異なり、それぞれ512バイトとして扱われる。

例:
print( fs.getSize( "/rom/programs/shell" ) )
ファイル"/rom/programs/shell"のサイズを取得し、結果を表示する。

getFreeSpace

  • fs.getFreeSpace( path )
  • パスpath(文字列)の空き容量を取得する
  • 戻り値:数値型。ディスクの空き容量がバイト単位で返る

pathがコンピュータ本体内の場合はコンピュータ本体の、フロッピーディスク内の場合はフロッピーディスクの空き容量が返る。
ディスクスペースの計算では、ディレクトリ(ルートディレクトリを含む)やサイズが512バイト未満のファイルは、実際のサイズと異なり、それぞれ512バイトとして扱われる。

例:
print( fs.getFreeSpace( "" ) )
コンピュータ本体の空き容量を取得し、結果を表示する。

makeDir

  • fs.makeDir( path )
  • パスpath(文字列)にディレクトリを作成する
  • 戻り値:nil

pathが読み取り専用であったり、同名のファイルがあったりした場合はエラーが発生する。

例:
fs.makeDir( "abcd/efgh" )
ルートディレクトリにあるabcdというディレクトリの中にefghというディレクトリを作成する(abcdというディレクトリが無かった場合はそれも作成する)。

move

  • fs.move( fromPath, toPath )
  • fromPath(文字列)のファイルまたはディレクトリをtoPath(文字列)へ移動する
  • 戻り値:nil

fromPathが存在しなかったり、fromPathtoPathが読み取り専用であったり、toPathに同名のファイルまたはディレクトリがあったり、toPathの移動先ディレクトリが存在しなかったりした場合はエラーが発生する。

例:
fs.move("test1", "mydir/test2")
ルートディレクトリにあるtest1をtest2に名前変更してルートディレクトリにあるmydirディレクトリ内に移動する。

copy

  • fs.copy( fromPath, toPath )
  • fromPath(文字列)のファイルまたはディレクトリをtoPath(文字列)へコピーする
  • 戻り値:nil

fromPathが存在しなかったり、toPathが読み取り専用であったり、toPathに同名のファイルまたはディレクトリがあったり、toPathの移動先ディレクトリが存在しなかったりした場合はエラーが発生する。

例:
fs.move( "test1", "mydir/test2" )
ルートディレクトリにあるtest1をtest2という名前でルートディレクトリにあるmydirディレクトリ内にコピーする。

delete

  • fs.delete( path )
  • パスpath(文字列)のファイルまたはディレクトリを削除する
  • 戻り値:nil

path読み取り専用であったり、コンピュータ本体やフロッピーディスクのルートディレクトリであった場合はエラーが発生する。

例:
fs.delete( "test1" )
ルートディレクトリにあるtest1を削除する。

combine

  • fs.combine( basePath, localPath )
  • 基礎パスbasePath(文字列)にパスlocalPath(文字列)を合成して返す
  • 戻り値:文字列型

例:
print( fs.combine( "a/b", "c/d" ) )
基礎パスa/bにパスc/dを合成して表示する("a/b/c/d"と表示される)。

open

  • fs.open( path, mode )
  • ファイルpath(文字列)をモードmode(文字列)で開き、ファイルハンドルを返す
  • 戻り値:テーブル型。ファイルハンドル。開くのに失敗した場合はnilが返る

モード
"r" ファイルを読み取り・テキストモードで開く。
"w" ファイルを書き込み・テキストモードで開く。既にあるデータは削除される。
"a" ファイルを追加・テキストモードで開く。既にあるデータは削除されず、書き込みはその後ろから行われる。
"rb" ファイルを読み取り・バイナリモードで開く。
"wb" ファイルを書き込み・バイナリモードで開く。既にあるデータは削除される。
"ab" ファイルを追加・バイナリモードで開く。既にあるデータは削除されず、書き込みはその後ろから行われる。
※テキストモードでは改行コードが環境に合わせて適切に変換される。一方、バイナリモードではそれが行われないので読み書きでバイナリデータの同一性が保持される。

"r"モードでファイルが存在しなかったり、"w"や"a"モードでファイルが読み取り専用だったりすると開くのに失敗してnilが返る。

ファイルを閉じる処理や入出力は後述のファイルハンドルを参照。

例:
h = fs.open("abcd", "w")
ファイルabcdを作成(既にある場合データは削除される)して、そのファイルハンドルを変数hに代入する。

ファイルハンドル

fs.open関数で取得したファイルハンドルを用いてファイル入出力を行う。

write関数などでデータを書き込んでも、flush関数やclose関数を呼び出すまでは実際のファイルには保存されていないので注意。
flush関数とclose関数以外は、ファイルを開いたモードによって呼び出せる関数が限定される。

以下の解説では、fs.open関数で取得したファイルハンドルを変数hに代入したものとする。

close

  • h.close()
  • ファイルを閉じる
  • 戻り値:nil

全モードで使用可能。
まだ保存されていない書き込みデータも保存される。

flush

  • h.flush()
  • ファイルに書き込まれたデータを実際にファイルへ保存する
  • 戻り値:nil

全モードで使用可能。

readLine ("r"モード)

  • h.readLine()
  • ファイルから一行読み込んで返す。行末の改行は削除されて返る
  • 戻り値:文字列型。ファイル終端まで読み込んだ後はnilが返る

readAll ("r"モード)

  • h.readAll()
  • ファイルを終端まで読み込んで返す。最終行終端の改行は削除されて返る
  • 戻り値:文字列型。ファイル終端まで読み込んだ後は""(長さ0文字列)が返る

write ("w"/"a"モード)

  • h.write( data )
  • data(文字列)をファイルに書き込む
  • 戻り値:nil

writeLine ("w"/"a"モード)

  • h.writeLine( data )
  • data(文字列)を終端に改行文字を付加してファイルに書き込む
  • 戻り値:nil

read ("rb"モード)

  • h.read()
  • ファイルから1バイト読み込んでそれを数値で返す
  • 戻り値:数値型。ファイル終端まで読み込んだ後はnilが返る

write ("wb"/"ab"モード)

  • h.write( byte )
  • 1バイト分のデータbyte(数値)をファイルに書き込む
  • 戻り値:nil

byteには実数範囲の数値が指定できるが、実際に書き込まれるのは符号なし整数1バイト分である。また、引数に数値以外を指定した場合、エラーこそ発生しないが書き込み処理は行われない。