Skip to content

التعامل مع مُوصِفات الملفات في Node.js

قبل أن تتمكن من التفاعل مع ملف موجود في نظام الملفات الخاص بك، يجب عليك الحصول على مُوصِف ملف. مُوصِف الملف هو مرجع إلى ملف مفتوح، وهو رقم (fd) تُرجعه عملية فتح الملف باستخدام طريقة open() التي يوفرها مُودول fs. هذا الرقم (fd) يُعرّف ملفًا مفتوحًا بشكل فريد في نظام التشغيل.

فتح الملفات

CommonJS (CJS)

javascript
const fs = require('node:fs')
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
  // fd هو مُوصِف الملف الخاص بنا
})

لاحظ أننا استخدمنا 'r' كمعامل ثاني لإجراء fs.open(). هذه الراية تعني أننا نفتح الملف للقراءة. هناك رايات أخرى ستستخدمها بشكل شائع:

الرايةالوصف
'w+'هذه الراية تفتح الملف للقراءة والكتابة. وهي تضع المؤشر في بداية الملف.
'a+'هذه الراية تفتح الملف للقراءة والكتابة، كما تضع المؤشر في نهاية الملف.

يمكنك أيضًا فتح الملف باستخدام طريقة fs.openSync، التي تُرجع مُوصِف الملف بدلاً من تقديمه في مُتصل:

javascript
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)

javascript
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 إلى دالة قائمة على الوعود:

javascript
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.