Lua 파일 I/O
파일 읽기 및 처리를 위한 Lua I/O 라이브러리입니다. 단순모드(C와 동일)와 완전모드로 나누어진다.
간단 모델은 현재 입력 파일과 현재 출력 파일을 갖고 있으며 이들 파일과 관련된 연산을 제공합니다.
완전한 모델은 외부 파일 핸들을 사용하여 구현됩니다. 모든 파일 작업을 객체 지향 형식의 파일 처리 메서드로 정의합니다.
간단한 파일 작업을 수행할 때는 단순 모드가 더 적합합니다. 하지만 일부 고급 파일 작업을 수행할 때 단순 모드는 부적절한 것 같습니다. 예를 들어 동시에 여러 파일을 읽는 등의 작업에는 전체 모드를 사용하는 것이 더 적합합니다.
파일 열기 연산문은 다음과 같습니다.
file = io.open (filename [, mode])
mode 값은
模式 | 描述 |
---|---|
r | 以只读方式打开文件,该文件必须存在。 |
w | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) |
r+ | 以可读写方式打开文件,该文件必须存在。 |
w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
a+ | 与a类似,但此文件可读可写 |
b | 二进制模式,如果文件是二进制文件,可以加上b |
+ | 号表示对文件既可以读也可以写 |
단순 모드
단순 모드는 표준 I/O를 사용하거나 하나의 현재 입력 파일과 하나의 현재 출력 파일을 사용합니다.
다음은 file.lua 파일 코드입니다. 운용할 파일은 test.lua입니다(없을 경우 이 파일을 생성해야 합니다).
-- 以只读方式打开文件 file = io.open("test.lua", "r") -- 设置默认输入文件为 test.lua io.input(file) -- 输出文件第一行 print(io.read()) -- 关闭打开的文件 io.close(file) -- 以附加的方式打开只写文件 file = io.open("test.lua", "a") -- 设置默认输出文件为 test.lua io.output(file) -- 在文件最后一行添加 Lua 注释 io.write("-- test.lua 文件末尾注释") -- 关闭打开的文件 io.close(file)
위 코드를 실행하면 test.ua 파일의 첫 번째 정보 줄이 변경되고 파일의 마지막 줄에 lua 주석이 추가되는 것을 확인할 수 있습니다. 예를 들어 출력은 다음과 같습니다.
-- test.lua 文件
위의 예에서는 io.read()에서 매개변수를 사용하지 않은 io."x" 메서드를 사용했습니다. 매개변수는 다음 중 하나일 수 있습니다. 다음 테이블:
模式 | 描述 |
---|---|
"*n" | 读取一个数字并返回它。例:file.read("*n") |
"*a" | 从当前位置读取整个文件。例:file.read("*a") |
"*l"(默认) | 读取下一行,在文件尾 (EOF) 处返回 nil。例:file.read("*l") |
number | 返回一个指定字符个数的字符串,或在 EOF 时返回 nil。例:file.read(5) |
다른 io 메서드는 다음과 같습니다.
io.tmpfile():파일이 업데이트 모드에서 열리고 프로그램이 자동으로 열립니다. 삭제
io.type(file): obj가 사용 가능한 파일 핸들인지 확인하세요
io .flush(): 버퍼의 모든 데이터를 파일에 씁니다.
io.lines(선택적 파일 이름): 반복을 반환합니다. 함수, 각각 이 호출은 파일의 끝에 도달하면 nil이 반환되지만 파일은 닫히지 않습니다.
전체 모드
보통 여러 파일을 동시에 처리해야 합니다. io.function_name 메소드 대신 file:function_name을 사용해야 합니다. 다음 예는 동일한 파일을 동시에 처리하는 방법을 보여줍니다.
-- 以只读方式打开文件 file = io.open("test.lua", "r") -- 输出文件第一行 print(file:read()) -- 关闭打开的文件 file:close() -- 以附加的方式打开只写文件 file = io.open("test.lua", "a") -- 在文件最后一行添加 Lua 注释 file:write("--test") -- 关闭打开的文件 file:close()
위 코드를 실행하면 test.ua 파일의 첫 번째 정보 줄이 출력되고 lua 주석이 다음과 같이 표시됩니다. 파일의 마지막 줄에 추가되었습니다. 예를 들어, 출력은 다음과 같습니다.
-- test.lua 文件
읽기 매개변수는 단순 모드와 일치합니다.
다른 방법:
file:seek(옵션 whence, 옵션 오프셋): 현재 파일 위치를 설정 및 가져오고 최종 파일을 반환합니다. 성공하면 파일 위치(바이트), 실패하면 nil과 오류 메시지를 반환합니다. 매개변수 값은 다음과 같습니다.
매개변수 없이 file:seek()는 현재 위치를 반환하고, file:seek("set")은 파일 헤더를 찾고, file:seek("end")는 끝을 찾습니다. 파일 크기를 반환하고
"set": 파일의 처음부터 시작
"cur": 현재 위치에서 시작 [ 기본값]
"end": 파일 끝에서 시작
offset: 기본값은 0
file:flush(): 버퍼에 있는 모든 데이터를 파일에 씁니다
io.lines(선택적 파일 이름): 지정된 파일 filename을 읽기 모드로 열고 반복 함수를 반환합니다. 각 호출은 파일의 끝에 도달하면 파일의 내용 한 줄을 얻습니다. 반환되고 파일이 자동으로 닫힙니다.
매개변수가 사용되지 않으면 io.lines() <=> io.input():lines();for line in io.lines("main.lua") do print(line) end
다음 예에서는 탐색 방법을 사용하여 파일의 아래쪽에서 25번째 위치를 찾고 읽기 방법의 *a 매개 변수를 사용합니다. 현재 위치(아래에서 25번째 위치)
-- 以只读方式打开文件 file = io.open("test.lua", "r") file:seek("end",-25) print(file:read("*a")) -- 关闭打开的文件 file:close()
여기의 출력 결과는 다음과 같습니다.
st.lua 文件末尾--test