Luaファイル読み書き詳細
2602 ワード
luaのファイル読み書きモデルはC言語から来て、完全なモデル(Cと同じ)、簡単なモデルに分けられます.
1、単純モデル
io.input([file])はデフォルトの入力ファイルを設定し、fileはファイル名(テキストで読み込む)またはファイルハンドル(ハンドルと理解でき、ハンドルがあればファイルを見つけることができる)であり、ファイルハンドルに戻ります.io.output([file])はデフォルトの出力ファイルを設定し、パラメータの意味は同じです.io.close([file])はファイルを閉じ、パラメータなしでデフォルトのファイルioを閉じます.read(formats)はデフォルトファイルを読み込み、formatsは「*a」(すべてを読み込む)、「*n」(数字で読み込む)、「*l」(行で読み込む、デフォルト)、n(つまり数字でn文字を読み取る)の値をとる.io.lines([fn])fnファイル名は、ファイルがなければデフォルトファイルを取り、反復器を返し、forサイクルで使用することができる.io.write(value)はデフォルトファイルにコンテンツを書き込みます.io.flush()は、ファイルキャッシュ内の操作をすぐにデフォルトの出力ファイルに作用させます.
例は最後にあります.
2、完全なモデル
単純なモデルではテキストタイプのファイルしか処理できず、完全なモデルではバイナリファイルを処理できます.
ファイルを処理する一般的な流れは、ファイルを開き、ファイルのハンドルを取得することです.ファイルハンドルでファイルを操作します.ファイルを閉じます.
完全なモデルは単純なモデルよりも複雑な点が見られるが,利点は機能がより強いことである.
io.Open(fn[,m])はファイルを開き、ファイルハンドルを返します.fnファイル名、mモードは:rは読み取り専用でファイルを開き、このファイルは存在しなければなりません.w書き込み専用ファイルを開き、ファイルが存在するとファイル長が0にクリアされ、そのファイル内容が消えます.ファイルが存在しない場合は、ファイルを作成します.aファイルのみを追加で開きます.ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は、書き込まれたデータがファイルの最後に追加されます.つまり、ファイルの元の内容が保持されます.(EOF符号保持)r+は、存在しなければならない読み書き可能にファイルを開く.w+は、読み書き可能なファイルを開く.ファイルが存在する場合、ファイルの長さがゼロになる.すなわち、ファイルの内容が消失する.ファイルが存在しない場合は、そのファイルを作成する.a+はaと類似しているが、このファイルは、読み書き可能bバイナリモードであり、ファイルがバイナリファイルである場合、b+番号を付けてファイルを表すことができる以下のfileがioであると読み書き可能である.Openが返すファイルハンドルは、単純なモードと同様の機能で、詳しくは説明しません.file:close()file:read(formats)file:lines()file:write(values)file:seek([p][,of])ファイルの読み書きのオフセットを設定し、pファイルオフセット開始位置(取値は「set」、ファイルヘッダ、これがデフォルト値、「cur」現在位置、「end」ファイル末尾)、ofオフセット量(デフォルト値0、正の表示は前、負の表示は後ろ)、ファイル内の新しい現在位置に戻ります.file:flush()
3、例
1、単純モデル
io.input([file])はデフォルトの入力ファイルを設定し、fileはファイル名(テキストで読み込む)またはファイルハンドル(ハンドルと理解でき、ハンドルがあればファイルを見つけることができる)であり、ファイルハンドルに戻ります.io.output([file])はデフォルトの出力ファイルを設定し、パラメータの意味は同じです.io.close([file])はファイルを閉じ、パラメータなしでデフォルトのファイルioを閉じます.read(formats)はデフォルトファイルを読み込み、formatsは「*a」(すべてを読み込む)、「*n」(数字で読み込む)、「*l」(行で読み込む、デフォルト)、n(つまり数字でn文字を読み取る)の値をとる.io.lines([fn])fnファイル名は、ファイルがなければデフォルトファイルを取り、反復器を返し、forサイクルで使用することができる.io.write(value)はデフォルトファイルにコンテンツを書き込みます.io.flush()は、ファイルキャッシュ内の操作をすぐにデフォルトの出力ファイルに作用させます.
例は最後にあります.
2、完全なモデル
単純なモデルではテキストタイプのファイルしか処理できず、完全なモデルではバイナリファイルを処理できます.
ファイルを処理する一般的な流れは、ファイルを開き、ファイルのハンドルを取得することです.ファイルハンドルでファイルを操作します.ファイルを閉じます.
完全なモデルは単純なモデルよりも複雑な点が見られるが,利点は機能がより強いことである.
io.Open(fn[,m])はファイルを開き、ファイルハンドルを返します.fnファイル名、mモードは:rは読み取り専用でファイルを開き、このファイルは存在しなければなりません.w書き込み専用ファイルを開き、ファイルが存在するとファイル長が0にクリアされ、そのファイル内容が消えます.ファイルが存在しない場合は、ファイルを作成します.aファイルのみを追加で開きます.ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は、書き込まれたデータがファイルの最後に追加されます.つまり、ファイルの元の内容が保持されます.(EOF符号保持)r+は、存在しなければならない読み書き可能にファイルを開く.w+は、読み書き可能なファイルを開く.ファイルが存在する場合、ファイルの長さがゼロになる.すなわち、ファイルの内容が消失する.ファイルが存在しない場合は、そのファイルを作成する.a+はaと類似しているが、このファイルは、読み書き可能bバイナリモードであり、ファイルがバイナリファイルである場合、b+番号を付けてファイルを表すことができる以下のfileがioであると読み書き可能である.Openが返すファイルハンドルは、単純なモードと同様の機能で、詳しくは説明しません.file:close()file:read(formats)file:lines()file:write(values)file:seek([p][,of])ファイルの読み書きのオフセットを設定し、pファイルオフセット開始位置(取値は「set」、ファイルヘッダ、これがデフォルト値、「cur」現在位置、「end」ファイル末尾)、ofオフセット量(デフォルト値0、正の表示は前、負の表示は後ろ)、ファイル内の新しい現在位置に戻ります.file:flush()
3、例
------------------ -----------------
--
local file1=io.input("1.txt") -- "1.txt" ,
local str=io.read("*a")
print(str)
--
local file2=io.output("2.txt") -- "2.txt"
io.write(str)
io.flush()
io.close()
--
function copy(fileA,fileB)
local file1=io.input(fileA)
if not file1 then print(fileA.." ") return end
local str=io.read("*a")
local file2=io.output(fileB)
io.write(str)
io.flush()
io.close()
end
for line in io.lines("1.txt") do
print(line)
end
------------------ -----------------
local f=io.open("3.txt","a+")
f:write("Happy New Year!")
f:flush()
f:seek("end",-1) --
local str=f:read(1) --
print(str) -- "!"
f:close()