0Pricing
Lua Academy · 강의

io.open으로 파일 열기

io.open을 사용해 읽기, 쓰기, 추가 모드로 파일을 엽니다.

io.open으로 파일 열기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

io.open 구문

io.open(filename, mode)은 파일을 열고 파일 핸들을 반환합니다. 실패하면 nil과 오류 메시지를 반환합니다. 모드 문자열: "r" 읽기(기본값), "w" 쓰기(내용 삭제), "a" 추가, "r+" 읽기/쓰기, 바이너리를 위한 "b" 접미사.

local f, err = io.open("test.txt", "w")
if not f then
  print("Error:", err)
  return
end
f:write("Hello, Lua!\n")
f:close()
print("Written successfully")

읽기 모드

기존 파일을 읽으려면 "r" 모드로 여십시오. 항상 nil인지 확인하십시오. 파일이 존재하지 않으면 io.open은 nil과 오류 메시지를 반환합니다. 파일이 반드시 존재한다고 가정하지 마십시오.

local f, err = io.open("test.txt", "r")
if not f then
  print("Cannot open:", err)
  return
end
local content = f:read("*a")  -- read all
f:close()
print(content)

쓰기 및 추가 모드

"w"는 파일을 만들거나 내용을 삭제하고 새로 씁니다. "a"는 필요하면 파일을 만들고 항상 끝에 내용을 추가합니다. 이전 내용을 잃고 싶지 않은 기록 파일에는 추가 모드를 사용하십시오.

-- Write (creates/truncates)
local f = io.open("log.txt", "w")
f:write("Session started\n")
f:close()

-- Append (adds to end)
local g = io.open("log.txt", "a")
g:write("Event: login\n")
g:write("Event: action\n")
g:close()

바이너리 모드

바이너리로 읽거나 쓰려면 모든 모드에 "b"를 추가하십시오. Unix에서는 텍스트 모드와 바이너리 모드가 동일합니다. Windows에서는 텍스트 모드가 \n을 \r\n으로 변환하지만, 바이너리 모드에서는 이 변환이 비활성화됩니다. 텍스트가 아닌 파일에는 항상 바이너리 모드를 사용하십시오.

-- Binary read
local f = io.open("image.png", "rb")
if f then
  local header = f:read(8)   -- read 8 bytes
  f:close()
  -- Check PNG magic number: \137PNG\r\n\26\n
  print("Read", #header, "bytes")
end

-- Binary write
local g = io.open("out.bin", "wb")
if g then
  g:write(string.char(0x89, 0x50, 0x4E, 0x47))
  g:close()
end

파일 핸들 메서드

io.open이 반환하는 파일 핸들에는 다음 메서드가 있습니다: f:read(...), f:write(...), f:lines(), f:seek(whence, offset), f:flush(), f:close(). 핸들에서 콜론 구문으로 호출하십시오.

local f = io.open("data.txt", "w")
f:write("line 1\n")
f:write("line 2\n")
f:write("line 3\n")
f:flush()   -- force write to disk
f:close()

local g = io.open("data.txt", "r")
for line in g:lines() do
  print(line)
end
g:close()

io.input 및 io.output

io.input(f)는 기본 입력 파일을 설정하고, io.output(f)는 기본 출력을 설정합니다. io.read()는 현재 입력에서 읽고, io.write()는 현재 출력에 씁니다. 기본 입력은 표준 입력(stdin)이고 기본 출력은 표준 출력(stdout)입니다.

-- Read from stdin (default input)
local line = io.read()  -- reads one line
print("You entered:", line)

-- Set default output to a file
io.output("out.txt")
io.write("This goes to out.txt\n")
io.output(io.stdout)  -- restore stdout

파일 존재 여부 확인

Lua에는 file.exists()가 없지만, 읽기 모드에서 io.open을 사용할 수 있습니다. 이 작업이 실패하면 파일이 존재하지 않거나 접근할 수 없는 것입니다. 또는 POSIX 시스템에서는 os.execute나 lfs 라이브러리를 사용할 수 있습니다.

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

print(fileExists("test.txt"))     -- true/false
print(fileExists("noexist.txt"))  -- false

모드를 사용하여 읽기

f:read()는 형식 문자열을 받습니다. "l" 또는 "*l"은 한 줄을 읽고 줄 바꿈을 제거하며, "L"은 줄 바꿈을 유지합니다. "n"은 숫자를 읽고, "a" 또는 "*a"는 EOF까지 읽습니다. 숫자를 지정하면 해당 바이트 수만큼 읽습니다.

local f = io.open("data.txt", "r")
if f then
  local line1 = f:read("l")   -- first line, no newline
  local num   = f:read("n")   -- next number in file
  local rest  = f:read("a")   -- rest of file
  f:close()
  print(type(line1), type(num))
end

임시 파일

io.tmpfile()은 읽기/쓰기 모드로 임시 파일을 엽니다. 프로그램이 종료되거나 파일 핸들이 가비지 수집될 때 파일이 자동으로 삭제됩니다. 파일 이름을 직접 관리하지 않고 중간 처리에 사용할 수 있습니다.

local tmp = io.tmpfile()
tmp:write("temporary data\n")
tmp:write("more data\n")

-- Seek back to start and read
tmp:seek("set", 0)
local content = tmp:read("a")
print(content)
-- File auto-deleted when tmp is collected

lines()로 줄 반복 처리

f:lines()는 한 번에 한 줄씩 읽는 반복자를 반환합니다. 반복자가 더 이상 읽을 내용이 없으면 파일을 자동으로 닫습니다. 큰 파일 전체를 한 번에 메모리에 올리지 않으므로 메모리를 효율적으로 사용할 수 있습니다.

local function countLines(path)
  local count = 0
  local f, err = io.open(path, "r")
  if not f then return nil, err end
  for _ in f:lines() do
    count = count + 1
  end
  -- f is closed automatically by lines()
  return count
end

local n, err = countLines("data.txt")
print("Lines:", n)

빠른 확인

파일이 존재하지 않을 때 io.open("file.txt", "a")는 무엇을 합니까?

복습: io.open

요약:

  • io.open(path, mode)는 핸들 또는 nil+오류를 반환합니다.
  • 모드: r w a r+ b
  • 핸들을 사용하기 전에 항상 nil인지 확인합니다.
  • 작업이 끝나면 f:close()를 호출합니다.
  • 메모리를 효율적으로 줄을 반복 처리하려면 f:lines()를 사용합니다.
  • 자동으로 삭제되는 임시 파일에는 io.tmpfile()을 사용합니다.

자주 묻는 질문

“io.open으로 파일 열기” 강의는 무료인가요?

네 — “io.open으로 파일 열기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“io.open으로 파일 열기”에서 뭘 배우나요?

io.open을 사용해 읽기, 쓰기, 추가 모드로 파일을 엽니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“io.open으로 파일 열기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. io.open으로 파일 열기
  2. 파일 내용 읽기
  3. 파일에 쓰고 내용 추가하기
  4. 파일 닫기와 오류 처리
← Lua Academy(으)로 돌아가기