Öppna filer med io.open
Öppna filer i läs-, skriv- och tilläggsläge med io.open.
Öppna filer med io.open är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.
Syntax för io.open
io.open(filename, mode) öppnar en fil och returnerar ett filhandtag, eller nil tillsammans med ett felmeddelande om det misslyckas. Lägessträngar: "r" läsning (standard), "w" skrivning (trunkera), "a" lägg till, "r+" läsning/skrivning, "b" suffix för binär åtkomst.
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")Läsläge
Öppna i läget "r" för att läsa en befintlig fil. Kontrollera alltid om värdet är nil – om filen inte finns returnerar io.open nil och ett felmeddelande. Anta aldrig att filen finns.
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)Skriv- och tilläggslägen
"w" skapar eller trunkerar filen. "a" skapar filen vid behov och lägger alltid till data i slutet. Använd tilläggsläget för loggfiler där du inte vill förlora tidigare innehåll.
-- 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()Binärt läge
Lägg till "b" i valfritt läge för binär läsning/skrivning. I Unix är text- och binärlägen identiska. I Windows översätter textläget \n till \r\n; binärläget inaktiverar detta. Använd alltid binärläget för filer som inte innehåller text.
-- 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()
endMetoder för filhandtag
Ett filhandtag (som returneras av io.open) har metoderna: f:read(...), f:write(...), f:lines(), f:seek(whence, offset), f:flush(), f:close(). Anropa dem med kolonsyntax på handtaget.
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 och io.output
io.input(f) anger standardinmatningsfilen och io.output(f) anger standardutdatafilen. io.read() läser från den aktuella inmatningen och io.write() skriver till den aktuella utmatningen. Standardinmatningen är stdin och standardutmatningen är 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 stdoutKontrollera om en fil finns
Lua har ingen file.exists(), men Ni kan använda io.open i läsläge – om det misslyckas finns filen inte eller så är den inte åtkomlig. Alternativt kan Ni använda os.execute eller biblioteket lfs på POSIX-system.
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")) -- falseLäsa med läslägen
f:read() accepterar formatsträngar: "l" eller "*l" läser en rad och tar bort radbrytningen, "L" behåller radbrytningen, "n" läser ett tal, "a" eller "*a" läser fram till EOF och ett tal läser så många byte.
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))
endTillfälliga filer
io.tmpfile() öppnar en tillfällig fil i läs- och skrivläge. Filen tas automatiskt bort när programmet avslutas eller filhandtaget samlas in av skräpsamlaren. Använd detta för mellanliggande bearbetning utan att behöva hantera filnamn.
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 collectedIterera över rader med lines()
f:lines() returnerar en iterator som läser en rad i taget. Den stänger automatiskt filen när iteratorn är slut. Detta är minneseffektivt för stora filer – hela filen läses aldrig in på en gång.
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)Snabbkontroll
Vad gör io.open("file.txt", "a") om filen inte finns?
Sammanfattning: io.open
Sammanfattning:
io.open(path, mode)returnerar ett handtag eller nil+fel- Lägen:
r w a r+ b - Kontrollera alltid om handtaget är nil innan Ni använder det
- Anropa
f:close()när Ni är klar f:lines()för minneseffektiv raditereringio.tmpfile()för temporära filer som tas bort automatiskt
Lär dig Lua med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 40
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Öppna filer med io.open” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Öppna filer med io.open”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Öppna filer med io.open”?
Öppna filer i läs-, skriv- och tilläggsläge med io.open. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lua Academy?
Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Öppna filer med io.open”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lua Academy-lektionen?
Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Öppna filer med io.open
- Läsa filinnehåll
- Skriva till och lägga till i filer
- Stänga filer och hantera fel