io.open ile Dosya Açma
Dosyaları okuma, yazma ve sona ekleme kiplerinde io.open kullanarak açın.
io.open ile Dosya Açma, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
io.open Sözdizimi
io.open(filename, mode) bir dosyayı açar ve bir dosya tanıtıcısı döndürür; başarısızlık durumunda nil ile birlikte bir hata iletisi döndürür. Kip dizgeleri: "r" okuma (varsayılan), "w" yazma (kısaltır), "a" sona ekleme, "r+" okuma/yazma, ikili kip için "b" son eki.
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")Okuma Kipi
Mevcut bir dosyayı okumak için "r" kipinde açın. Her zaman nil denetimi yapın; dosya yoksa io.open nil ve bir hata iletisi döndürür. Dosyanın mevcut olduğunu asla varsaymayın.
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)Yazma ve Sona Ekleme Kipleri
"w" dosyayı oluşturur veya kısaltır. "a" gerekirse dosyayı oluşturur ve her zaman sonuna ekleme yapar. Önceki içeriği kaybetmek istemediğiniz günlük dosyaları için sona ekleme kipini kullanın.
-- 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()İkili Kip
İkili okuma/yazma için herhangi bir kipe "b" ekleyin. Unix'te metin ve ikili kipler aynıdır. Windows'ta metin kipi \n karakterini \r\n karakterine dönüştürür; ikili kip bunu devre dışı bırakır. Metin olmayan dosyalar için her zaman ikili kipi kullanı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()
endDosya Tanıtıcısı Yöntemleri
Bir dosya tanıtıcısının (io.open tarafından döndürülür) şu yöntemleri vardır: f:read(...), f:write(...), f:lines(), f:seek(whence, offset), f:flush(), f:close(). Bunları tanıtıcı üzerinde iki nokta sözdizimiyle çağırın.
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 ve io.output
io.input(f) varsayılan girdi dosyasını ayarlar; io.output(f) varsayılan çıktıyı ayarlar. io.read() geçerli girdiden okur; io.write() geçerli çıktıya yazar. Varsayılan girdi stdin, varsayılan çıktı stdout'tur.
-- 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 stdoutDosyanın Var Olup Olmadığını Denetleme
Lua'da file.exists() yoktur; ancak okuma kipinde io.open kullanabilirsiniz. İşlem başarısız olursa dosya yoktur (veya dosyaya erişilemiyordur). Alternatif olarak POSIX sistemlerinde os.execute ya da lfs kütüphanesini kullanabilirsiniz.
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")) -- falseKiplerle Okuma
f:read() biçim dizelerini kabul eder: "l" veya "*l" bir satır okur (satır sonunu kaldırır); "L" satır sonunu korur; "n" bir sayı okur; "a" veya "*a" EOF'a kadar okur; bir sayı, o kadar bayt okur.
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))
endGeçici Dosyalar
io.tmpfile() okuma/yazma kipinde bir geçici dosya açar. Dosya, program sona erdiğinde veya tutamacın çöp toplayıcısı tarafından toplanmasıyla otomatik olarak silinir. Dosya adlarını yönetmeden ara işlemler yapmak için kullanabilirsiniz.
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 collectedlines() ile Satırları Yineleme
f:lines() her seferinde bir satır okuyan bir yineleyici döndürür. Yineleyici tükendiğinde dosyayı otomatik olarak kapatır. Bu yöntem büyük dosyalarda bellek açısından verimlidir; dosyanın tamamını tek seferde belleğe yüklemez.
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)Kısa Denetim
Dosya mevcut değilse io.open("file.txt", "a") ne yapar?
Tekrar: io.open
Özet:
io.open(path, mode)bir tutamaç veya nil+error döndürür- Kipler:
r w a r+ b - Tutamaçtan önce her zaman nil denetimi yapın
- İşiniz bittiğinde
f:close()çağırın - Bellek açısından verimli satır yineleme için
f:lines() - Otomatik olarak silinen geçici dosyalar için
io.tmpfile()
Sıkça Sorulan Sorular
“io.open ile Dosya Açma” dersi ücretsiz mi?
Evet — “io.open ile Dosya Açma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“io.open ile Dosya Açma” dersinde ne öğreneceğim?
Dosyaları okuma, yazma ve sona ekleme kiplerinde io.open kullanarak açın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“io.open ile Dosya Açma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- io.open ile Dosya Açma
- Dosya İçeriğini Okuma
- Dosyalara Yazma ve Sona Ekleme
- Dosyaları Kapatma ve Hata İşleme