Lua Academy · Lektion

Öppna filer med io.open

Öppna filer i läs-, skriv- och tilläggsläge med io.open.

Lektion 1 av 412 steg

Ö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()
end

Metoder 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 stdout

Kontrollera 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"))  -- false

Lä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))
end

Tillfä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 collected

Iterera ö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 raditerering
  • io.tmpfile() för temporära filer som tas bort automatiskt
Gratis att börja

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

  1. Öppna filer med io.open
  2. Läsa filinnehåll
  3. Skriva till och lägga till i filer
  4. Stänga filer och hantera fel
← Tillbaka till Lua Academy