Lua Academy · บทเรียน

การเปิดไฟล์ด้วย io.open

เปิดไฟล์ในโหมดอ่าน เขียน และเพิ่มข้อมูลด้วย io.open

บทเรียน 1 จาก 412 ขั้นตอน

การเปิดไฟล์ด้วย io.open เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 ในโหมดอ่านได้ หากการเปิดล้มเหลว แสดงว่าไม่มีไฟล์นั้นอยู่ (หรือไม่สามารถเข้าถึงได้) อีกทางเลือกหนึ่งคือใช้ os.execute หรือไลบรารี lfs บนระบบ POSIX

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() สำหรับไฟล์ชั่วคราวที่ลบโดยอัตโนมัติ
เริ่มต้นได้ฟรี

เรียนรู้ Lua ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
40
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “การเปิดไฟล์ด้วย io.open” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเปิดไฟล์ด้วย io.open” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเปิดไฟล์ด้วย io.open”

เปิดไฟล์ในโหมดอ่าน เขียน และเพิ่มข้อมูลด้วย io.open คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การเปิดไฟล์ด้วย io.open” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเปิดไฟล์ด้วย io.open
  2. การอ่านเนื้อหาไฟล์
  3. การเขียนและเพิ่มข้อมูลลงไฟล์
  4. การปิดไฟล์และการจัดการข้อผิดพลาด
← กลับไปที่ Lua Academy