التعامل مع مُوصِفات الملفات في Node.js
قبل أن تتمكن من التفاعل مع ملف موجود في نظام الملفات الخاص بك، يجب عليك الحصول على مُوصِف ملف. مُوصِف الملف هو مرجع إلى ملف مفتوح، وهو رقم (fd) تُرجعه عملية فتح الملف باستخدام طريقة open()
التي يوفرها مُودول fs
. هذا الرقم (fd) يُعرّف ملفًا مفتوحًا بشكل فريد في نظام التشغيل.
فتح الملفات
CommonJS (CJS)
const fs = require('node:fs')
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
// fd هو مُوصِف الملف الخاص بنا
})
لاحظ أننا استخدمنا 'r'
كمعامل ثاني لإجراء fs.open()
. هذه الراية تعني أننا نفتح الملف للقراءة. هناك رايات أخرى ستستخدمها بشكل شائع:
الراية | الوصف |
---|---|
'w+' | هذه الراية تفتح الملف للقراءة والكتابة. وهي تضع المؤشر في بداية الملف. |
'a+' | هذه الراية تفتح الملف للقراءة والكتابة، كما تضع المؤشر في نهاية الملف. |
يمكنك أيضًا فتح الملف باستخدام طريقة fs.openSync
، التي تُرجع مُوصِف الملف بدلاً من تقديمه في مُتصل:
const fs = require('node:fs')
try {
const fd = fs.openSync('/Users/joe/test.txt', 'r')
} catch (err) {
console.error(err)
}
إجراء العمليات
بمجرد حصولك على مُوصِف الملف بأي طريقة تختارها، يمكنك إجراء جميع العمليات التي تتطلب ذلك، مثل استدعاء fs.close()
والعديد من العمليات الأخرى التي تتفاعل مع نظام الملفات.
استخدام fsPromises
يمكنك أيضًا فتح الملف باستخدام طريقة fsPromises.open
القائمة على الوعود، والتي يوفرها مُودول fs/promises
. مُودول fs/promises
متوفر فقط بدءًا من Node.js الإصدار 14. قبل الإصدار 14، وبعد الإصدار 10، يمكنك استخدام require('fs').promises
بدلاً من ذلك. قبل الإصدار 10، وبعد الإصدار 8، يمكنك استخدام util.promisify
لتحويل طرق fs
إلى طرق قائمة على الوعود.
ES Modules (MJS)
import fs from 'node:fs/promises'
async function run() {
const fileHandle = await fs.open('example.txt', 'r')
try {
filehandle = await fs.open('/Users/joe/test.txt', 'r')
console.log(filehandle.fd)
console.log(await filehandle.readFile({ encoding: 'utf8' }))
} finally {
await fileHandle.close()
}
}
run().catch(console.error)
مثال على util.promisify
فيما يلي مثال على استخدام util.promisify
لتحويل fs.open
إلى دالة قائمة على الوعود:
const fs = require('node:fs')
const util = require('node:util')
const open = util.promisify(fs.open)
open('test.txt', 'r')
.then(fd => {
// استخدام مُعرّف الملف
})
.catch(err => {
// معالجة الخطأ
})
لِرؤية المزيد من التفاصيل حول وحدة fs/promises
، يُرجى مراجعة وثائق واجهة برمجة تطبيقات fs/promises.