فتح الملفات باستخدام io.open
افتح الملفات في أوضاع القراءة والكتابة والإلحاق باستخدام io.open
فتح الملفات باستخدام io.open درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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" حتى نهاية الملف؛ أما تمرير عدد فيقرأ ذلك العدد من البايتات.
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+error - الأوضاع:
r w a r+ b - تحققوا دائمًا من أن المقبض ليس nil قبل استخدامه
- استدعوا
f:close()عند الانتهاء - استخدموا
f:lines()للتكرار على الأسطر بكفاءة من حيث الذاكرة - استخدموا
io.tmpfile()للملفات المؤقتة المحذوفة تلقائيًا
تعلم Lua مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 40
- الدروس
- 159
الأسئلة الشائعة
هل درس «فتح الملفات باستخدام io.open» مجاني؟
نعم — نص درس «فتح الملفات باستخدام io.open» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «فتح الملفات باستخدام io.open»؟
افتح الملفات في أوضاع القراءة والكتابة والإلحاق باستخدام io.open تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «فتح الملفات باستخدام io.open»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فتح الملفات باستخدام io.open
- قراءة محتويات الملفات
- الكتابة إلى الملفات وإلحاق البيانات بها
- إغلاق الملفات ومعالجة الأخطاء