fs.open( ) :
🔍 fs.open() কি করে?
fs.open() Node.js এর built-in fs module এর একটা method যা দিয়ে তুমি কোনো ফাইলকে open করতে পারো (read/write/append ইত্যাদি mode-এ)।
এটা ফাইল ওপেন করে একটা file descriptor (fd) দেয়, যেটা পরবর্তীতে ফাইল পড়া বা লেখার জন্য দরকার হয়।
🧠 Syntax:
fs.open(path, flags, mode, callback)
✨ Parameter Details:
| Parameter | Type | Description |
|---|---|---|
path |
string | ফাইলের path |
flags |
string | কিভাবে ফাইল open হবে সেটা বোঝায় (read, write etc.) |
mode |
number (optional) | ফাইল permissions (default: 0o666) |
callback |
function | ফাইল open হবার পর call হয় |
🔧 Common Flags:
| Flag | Meaning |
|---|---|
'r' |
Read-only |
'r+' |
Read and Write |
'w' |
Write (if file exists, it'll be truncated) |
'w+' |
Read and Write (file will be created if not exists) |
'a' |
Append |
'a+' |
Read and Append |
✅ Example:
const fs = require('fs');
fs.open('example.txt', 'w', (err, fd) => {
if (err) {
return console.error('Error opening file:', err);
}
console.log('File opened successfully. File descriptor:', fd);
});
🧾 What’s happening here?
'example.txt'ফাইলটিকে'w'(write) mode-এ open করা হচ্ছে।-
যদি ফাইল না থাকে, Node.js সেটা create করে নেবে।
-
যদি ফাইল থাকে, সেটা empty হয়ে যাবে।
-
Callback function-এর
fdদিয়ে তুমি পরেfs.write()বাfs.close()করতে পারো।
🛠 Bonus: fs.openSync()
যদি তুমি synchronous version চাও:
const fd = fs.openSync('example.txt', 'w');
console.log(fd);
🔍 fd মানে কী?
fd হচ্ছে:
File Descriptor
এটা হলো একটা number, যেটা Node.js তোমাকে দেয় যখন তুমি কোনো ফাইল open করো fs.open() এর মাধ্যমে।
🎯 সংক্ষেপে বললে:
🔹 fd একটা ID number (file descriptor number)
🔹 Node.js এর ভিতরে এটা ব্যাবহার হয় বুঝতে যে তুমি কোন ফাইলের সাথে কাজ করছো
🔹 তুমি fd দিয়ে ফাইলের উপর read/write/close ইত্যাদি কাজ করতে পারো
📦 উদাহরণ দিয়ে বোঝাই:
const fs = require("fs");
fs.open("test.txt", "w", (err, fd) => {
if (err) {
return console.error(err);
}
console.log("File descriptor is:", fd); // Output: like 3, 4, 5 etc.
fs.write(fd, "Hello World!", (err) => {
if (err) console.error("Write error:", err);
fs.close(fd, () => {
console.log("File closed.");
});
});
});
এখানে কী হচ্ছে?
fs.open()→ ফাইল খুলে,fdদেয় (ধরো 3)-
তারপর
fs.write()→ আমরাfd = 3দিয়ে ফাইলে লিখি -
তারপর
fs.close()→fd = 3ফাইলটা বন্ধ করি
📌 মনে রাখো:
fdহচ্ছে একটা ফাইলের আইডেন্টিফায়ার।-
এটা শুধুমাত্র low-level file operations (like
fs.write(),fs.read()) এর জন্য দরকার হয়। -
তুমি যদি
fs.writeFile()বাfs.readFile()এর মতো high-level method ইউজ করো, তাহলেfdনিয়ে ভাবতে হবে না।
আমরা তো fs.writeFile() বা fs.readFile() ব্যবহার করেই সহজে ফাইল লিখতে/পড়তে পারি, তাহলে fd বা fs.open() কেন দরকার?
চলো, ব্যাপারটা ধাপে ধাপে বুঝে নিই:
✅ High-level vs Low-level Methods
🔹 High-level Methods (Easy, Simple):
fs.writeFile()-
fs.readFile() -
fs.appendFile()
👉 এগুলা ফাইল খোলে, পড়ে/লিখে, তারপর নিজেই বন্ধ করে ফেলে।
👉 তুমি fd দেখতে বা handle করতে হয় না।
🔹 Low-level Methods (More Control):
fs.open()-
fs.write() -
fs.read() -
fs.close()
👉 এইগুলোতে তুমি নিজে ফাইল খুলো (open), নিজে লিখো (write), আর নিজে বন্ধ করো (close)।
👉 এখানে তুমি fd পাবে, যেটা ফাইলটার ID হিসেবে কাজ করে।
🎯 তাহলে fd কবে দরকার?
✅ ১. যদি তুমি অনেক বার ফাইল লিখতে/পড়তে চাও:
const fs = require("fs");
fs.open("log.txt", "a", (err, fd) => {
fs.write(fd, "First log\n", () => {});
fs.write(fd, "Second log\n", () => {});
fs.write(fd, "Third log\n", () => {});
});
👉 এখানে তুমি একবার fs.open() দিয়ে fd নিয়ে বারবার লিখতে পারছো।
👉 High-level method হলে প্রতিবার ফাইল খুলে আবার বন্ধ করতো → এতে performance কমে যেত।
✅ ২. যদি তুমি বড় ফাইলের বিশেষ অংশ পড়তে চাও:
fs.read(fd, buffer, offset, length, position, callback)
👉 এই জিনিস fd ছাড়া করা সম্ভব না।
✅ ৩. Stream-এর মত scenario-তে:
Low-level control দরকার হয়—যেমন: লগ ফাইল, বড় ফাইল, ভিডিও প্রসেসিং ইত্যাদি।
🧠 Summary:
| বিষয় | High-Level | Low-Level (fd) |
|---|---|---|
| সহজ ব্যবহার | ✅ | ❌ |
| Performance | ❌ (slow for many ops) | ✅ (better control) |
| Chunk/partial read | ❌ | ✅ |
| Manual control | ❌ | ✅ |
তুমি যদি beginner level-এ কাজ করো, তাহলে fs.writeFile() ই যথেষ্ট।
কিন্তু যদি বড় প্রজেক্টে performance বা low-level control দরকার হয়, তখন fd দরকার হবে।