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
দরকার হবে।