การเปิดไฟล์ด้วย io.open
เปิดไฟล์ในโหมดอ่าน เขียน และเพิ่มข้อมูลด้วย io.open
การเปิดไฟล์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเปิดไฟล์ด้วย io.open
- การอ่านเนื้อหาไฟล์
- การเขียนและเพิ่มข้อมูลลงไฟล์
- การปิดไฟล์และการจัดการข้อผิดพลาด