Bnlang এ ফাইল লেখা
io মডিউল রিড API-কে রাইট সাইডে মিরর করে:
io.write_file(path, data)— সিঙ্ক্রোনাস; ফাইল ওভাররাইট করে।io.write_file_async(path, data, cb)— অ্যাসিঙ্ক্রোনাস; রাইট ডিউরেবল হলে কলব্যাক ফায়ার হয়।io.append_file(path, data)— সিঙ্ক্রোনাস অ্যাপেন্ড (ফাইল না থাকলে তৈরি করে)।io.open_write(path)— স্ট্রিমিং; এক একটা চাঙ্ক পুশ করুন।
Synchronous Write
সরলতম ফর্ম। বাইটগুলো ডিস্কে না যাওয়া পর্যন্ত ব্লক করে।
import "io" as io;
io.write_file("greeting.txt", "Hello from Bnlang!");
print("written");
Asynchronous Write
সাথে সাথে ফেরত আসে। ডাটা ডিউরেবল হলে কলব্যাক একটি এরর আর্গুমেন্ট-সহ ফায়ার হয় (সফল হলে null)।
import "io" as io;
io.write_file_async("greeting.txt", "Hello, async!", function (err) {
if (err != null) {
print("write failed:", err);
return;
}
print("written");
});
print("scheduled");
Appending
লগ ফাইল ও জমা হওয়া আউটপুটের জন্য io.append_file ব্যবহার করুন — এটি ট্রাঙ্কেট করে না, প্রয়োজন হলে ফাইল তৈরি করে।
import "io" as io;
io.append_file("app.log", "started up\n");
io.append_file("app.log", "ready\n");
Streaming Large Outputs
যখন আউটপুট মেমরিতে আঁটে না (অথবা আপনি বাফার করতে চান না), একটি রাইট স্ট্রিম খুলুন এবং চাঙ্ক পুশ করুন।
স্ট্রিম close() করতে ভুলবেন না — এটাই শেষ বাইটগুলো ডিস্কে ফ্লাশ করে।
import "io" as io;
var sink = io.open_write("report.csv");
sink.write("id,name\n", function (err) { /* ... */ });
sink.write("1,Alice\n", function (err) { /* ... */ });
sink.write("2,Bob\n", function (err) { /* ... */ });
sink.close(function (err) {
if (err != null) { print("close failed:", err); return; }
print("report written");
});
Best Practices
- দীর্ঘ-চলা প্রোগ্রামে async ভ্যারিয়েন্ট ব্যবহার করুন; sync শুধু স্ক্রিপ্ট ও একবারের কাজে।
- একই পাথে কনকারেন্ট
write_fileকল মিশাবেন না — এরা একে অপরকে ওভাররাইট করে। - স্ট্রিমিং রাইটে সবসময়
close()কল করুন, এবং ডাটা ডিউরেবল কিনা কনফার্ম করতে এর কলব্যাক ব্যবহার করুন। - ওভাররাইটে সতর্ক থাকুন:
write_fileজিজ্ঞেস না করেই ট্রাঙ্কেট করে। এটা চিন্তার বিষয় হলে আগেio.existsদিয়ে চেক করুন।