1. ホーム
  2. スクリプト・コラム
  3. ルア

Luaファイル操作の説明

2022-01-06 08:37:20

I/Oライブラリは、ファイルを操作するための2つの異なる方法を提供します。

ioテーブル呼び出しメソッド

ioテーブルを使用すると、io.openは指定されたファイルの説明を返し、すべての操作はこのファイルの説明を中心に行われます。ioテーブルは、3つの定義済みファイルの説明io.stdin、io.stdout、io.stderrも提供します。

ファイルハンドル直接呼出し方式
file:XXX()関数メソッドを使用します。fileはio.open()が返すファイルハンドルです。ほとんどのI/O関数呼び出しは、失敗するとnilとエラーメッセージを返し、成功するとnilを返すものもある

IO
io.close ([ファイル])
io.flush ()
file:flush() と同等で、キャッシュの内容をすべてデフォルトの出力ファイルに出力します。

io.lines ([ファイル名])
指定されたファイル filename を読み込みモードで開き、呼び出されるたびにファイルの 1 行を取得し、ファイルの最後に達すると nil を返して引数なしで自動的にファイルを閉じる反復関数を返します io.lines() <=> io.input():lines(); デフォルト入力デバイスの内容を読み込み、ファイルの終わりでそれを閉じません。

for line in io.lines("main.lua") do
  print(line)
end


io.open (ファイル名[, モード])
モードを使用します。

  r"。読み込みモード(デフォルト)。

  "w":書き込みモードです。

  "a": 追加モード。

  "r+": 更新モード、以前のデータはすべて保存されます。

  "w+": 更新モード、以前のデータはすべて消去されます。

  "a+": 追加更新モード、以前のデータはすべて保存され、ファイル末尾への追加のみが許可されます。

  "b": 一部のシステムではバイナリモードがサポートされています。

io.read (...)
io.type (obj)
obj が利用可能なファイルハンドルであるかどうかを検出します。

を返します。

  "file": 開いているファイルハンドルの場合

  クローズドファイル:閉じたファイルへのハンドル

  nil: objがファイルハンドルでないことを意味します。

io.write (...)
io.output():writeと同じ意味です。

ファイル

file:close()
ファイルハンドルがガベージコレクションされると、ファイルは自動的にクローズされます。ハンドルは予測できない値に変更されます

ファイル:フラッシュ()
バッファの全データをファイルに書き込む

ファイル:ラインズ()
呼び出されるたびにファイルの1行を取得し、ファイルの終端に達するとnilを返しますが、ファイルを閉じることはありません。

for line in file:lines() do body end

file:read(...)

各フォーマット関数は文字列または数値を返し、正しく読み込まれなかった場合はnilを返します。

形式を指定します。

  "n"。数値を読み込む("number")

  "a": 現在の位置からファイル全体を読み込むか、ファイルの終端であれば空文字列を返す ("all")

  "l"。[デフォルト】次の行を読む、またはファイルの終端であればnilを返す ("line")

  数を指定します。指定されたバイト数の文字を読み込む、またはファイルの終端であればnilを読み込む。numberが0の場合は空文字列を、終端の場合はnilを返す。

file:seek(whence)

現在のファイルの位置を設定・取得し、成功すれば最終的なファイルの位置(バイト)を返し、失敗すればnilとエラーメッセージを返します。

パラメータ

ということです。

  "set": ファイルのヘッダーから

  "cur": 現在の位置から開始 [デフォルト].

  "end"。ファイルの終端から開始

offset:デフォルトは0

  引数なし file:seek() は現在の位置を返し、 file:seek("set") はファイルの先頭を、 file:seek("end") はファイルの終端を探し、ファイルサイズを返します。

file:write(...)

指定されたパラメータ形式でファイルの内容を出力します。パラメータは文字または数字でなければならず、それ以外の値を出力する場合は、tostringまたはstring.formatで変換する必要があります。

インスタンス
ファイルの全内容を読み取る

function readfile(path)
  local file = io.open(path, "r")
  if file then
    local content = file:read("*a")
    io.close(file)
    return content
  end
  return nil
end


コンテンツをファイルに書き込む

function writefile(path, content, mode)
  mode = mode or "w+b"
  local file = io.open(path, mode)
  if file then
    if file:write(content) == nil then return false end
    io.close(file)
    return true
  else
    return false
  end
end


ファイルサイズ

-- @return : number of file bytes
function filesize(path)
  local size = false
  local file = io.open(path, "r")
  if file then
    local current = file:seek()
    size = file:seek("end")
    file:seek("set", current)
    io.close(file)
  end
  return size
end


ファイルが存在するか

function fileExists(path)
  local file = io.open(path, "r")
  if file then
    io.close(file)
    return true
  end
  return false
end