التعامل مع نظام الملفات في Node.js
الاستقرار: 2 - مستقر
توفِّر الوحدة fs
واجهةً برمجيةً للتعامل مع نظام الملفات بطريقة قريبة جدًا من دوال POSIX القياسية.
يمكن الوصول إلى هذه الوحدة باستعمال الأمر التالي:
const fs = require('fs');
جميع عمليات نظام الملفات لها أشكال متزامنة وغير متزامنة.
تأخذ الأشكال المتزامنة دالة رد نداء مكملة دومًا وتُمرَّر إليها كآخر وسيط. تعتمد الوسائط المُمرَّرة إلى دالة رد النداء المكملة تلك على التابع نفسه، ولكن الوسيط الأول فيها محجوزٌ دومًا للاستثناء. إن اكتملت العملية بنجاح، فستكون قيمة هذا الوسيط null
أو undefined
.
const fs = require('fs');
fs.unlink('/tmp/hello', (err) => {
if (err) throw err;
console.log('successfully deleted /tmp/hello');
});
تُرمَى الاستثناءات التي تحدث باستعمال العمليات المتزامنة مباشرةً وقد تُعالَج باستعمال العبارة try...catch
، أو ربما يُسمَح لها بالانتشار للأعلى (bubble up).
const fs = require('fs');
try {
fs.unlinkSync('/tmp/hello');
console.log('successfully deleted /tmp/hello');
} catch (err) {
// عالج الخطأ هنا
}
لا يوجد أي ترتيب مضمون عند استعمال توابع غير متزامنة. بناءً على ذلك، هنالك احتمالٌ كبير أن يحصل خطأ في المثال التالي لأنَّ العملية fs.stat()
قد تكتمل قبل العملية fs.rename()
:
fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
console.log('renamed complete');
});
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`stats: ${JSON.stringify(stats)}`);
});
لتنفيذ المثال بالشكل والترتيب الصحيح للعمليات، انقل الاستدعاء fs.stat()
إلى داخل رد النداء للعملية fs.rename()
:
fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`stats: ${JSON.stringify(stats)}`);
});
});
في العمليات المشغولة، يُوصَى المبرمج بشدة باستخدام الاصدارات غير المتزامنة من هذه الاستدعاءات، إذ ستحجب الإصدارات المتزامنة كامل العملية حتى تكمل أو توقف جميع اتصالاتها.
لمَّا كانت أغلب دوال الوحدة fs
تسمح بحذف وسيط رد النداء، فإنَّ هذا السلوك غير مُستحسَن مطلقًا، إذ تُستخدَم دالة رد النداء الافتراضية، في أبسط الحالات، في معالجة الأخطاء المرمية وهنا تكمن فائدتها. للحصول على متعقِّب لموقع الاستدعاء الأصلي، اضبط متغير البيئة NODE_DEBUG
.
أُهملَت عملية حذف دالة رد النداء في دوال الوحدة fs
الغير متزامنة، وقد يؤدي فعل ذلك إلى رمي خطأ في المستقبل.
$ cat script.js
function bad() {
require('fs').readFile('/');
}
bad();
$ env NODE_DEBUG=fs node script.js
fs.js:88
throw backtrace;
^
Error: EISDIR: illegal operation on a directory, read
<stack trace.>
مسارات الملف (File paths)
تقبل أغلب عمليات fs
تمرير مسارات لملفات إليها في شكل سلسلة نصية، أو كائن من النوع Buffer
، أو النوع URL
باستعمال البروتوكول file:
.
تُفسَّر المسارات التي توضع في سلاسل نصية كسلاسل من المحارف بترميز UTF-8 ممثلةً اسم الملف المطلق أو النسبي. ستُستبيَن المسارات النسبية نسبةً إلى مجلد العمل الحالي المحدَّد باستعمال process.cwd()
.
اطلع على المثال التالي الذي يشرح كيفية استعمال مسار مطلق على نظام متوافق مع معيار POSIX:
const fs = require('fs');
fs.open('/open/some/file.txt', 'r', (err, fd) => {
if (err) throw err;
fs.close(fd, (err) => {
if (err) throw err;
});
});
اطلع على المثال التالي الذي يشرح كيفية استعمال مسار نسي (نسبةً إلى process.cwd()
) على نظام متوافق مع معيار POSIX:
fs.open('file.txt', 'r', (err, fd) => {
if (err) throw err;
fs.close(fd, (err) => {
if (err) throw err;
});
});
تحديد المسارات باستعمال الكائنات Buffer
مفيدٌ جدًا خصوصًا على بعض أنظمة التشغيل المتوافقة مع POSIX التي تعامل مسارات الملفات كسلسلة مبهمة من البايتات. في بعض الأنظمة، يمكن لمسار ملف واحد أن يحوي سلاسل فرعية ترميز محارف كلِّ واحدة منها مختلفٌ عن الآخر. وكما هو الحال في مسارات السلاسل النصية، يمكن أن تكون المسارات المحتواة في الكائنات Buffer
نسبيةً أو مطلقةً. اطلع على المثال التالي الذي يشرح كيفية استعمال مسار مطلق على نظام متوافق مع معيار POSIX:
fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {
if (err) throw err;
fs.close(fd, (err) => {
if (err) throw err;
});
});
في ويندوز، تتبنى Node.js مفهوم «مجلد العمل لكل قرص» (per-drive working directory). يمكن ملاحظة هذا السلوك عند استعمال مسار قرص دون محرف الخط المائل العكسي \
. على سبيل المثال، يمكن أن يعيد الاستدعاء fs.readdirSync('c:\\')
نتيجةً مختلفةً عن الاستدعاء fs.readdirSync('c:')
. للمزيد من المعلومات، اطلع على هذه الصفحة.
دعم الكائن URL
أضيف في الإصدار: v7.6.0.
في أغلب دوال الوحدة fs
، قد يُمرَّر الوسيط path
والوسيط filename
ككائن من النوع URL
الذي يمثل عنوان URL متوافق مع المعيار WHATWG. الكائنات URL
التي تستعمل البروتوكول file:
مدعومةً فقط.
const fs = require('fs');
const fileUrl = new URL('file:///tmp/hello');
fs.readFileSync(fileUrl);
العناوين URL ذات البروتوكول file:
هي مسارات مطلقة دومًا.
قد يترافق استعمال الكائنات URL
-التي تمثل عناوين URL متوافقة مع المعيار WHATWG- سلوكيات محددة بحسب المنصة المستعملة.
في ويندوز، تحوَّل العناوين URL ذات البرتوكول file:
مع اسم المضيف (hosename) إلى مسارات UNC بينما تحول العناوين URL ذات البرتوكول file:
التي تحوي على محارف الأقراص إلى مسارات محلية مطلقة. أما العناوين URL ذات البروتوكول file:
التي لا تحوي اسم المضيف (hosename) ولا محرف قرص، فسيؤدي استعمالها إلى رمي خطأ. تفحَّص المثال التالي الذي يشرح ما سبق:
// :في ويندوز
// - UNC مع اسم المضيف إلى مسارات file: ذات البرتوكول URL تحوَّل العناوين
// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
fs.readFileSync(new URL('file://hostname/p/a/t/h/file'));
// - مع محارف الأقراص إلى مسارات محلية مطلقة file: ذات البرتوكول URL تحوَّل العناوين
// file:///C:/tmp/hello => C:\tmp\hello
fs.readFileSync(new URL('file:///C:/tmp/hello'));
// - التي بدون اسم مضيف على محرف قرص file: ذات البروتوكول URL يجب أن تحوي العناوين
fs.readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
fs.readFileSync(new URL('file:///c/p/a/t/h/file'));
// إذ يجب أن يكون مسار TypeError [ERR_INVALID_FILE_URL_PATH] سيرمى الخطأ
// مطلقًا URL الملف الذي يمثله عنوان
يجب على العناوين URL ذات البروتوكول <code>file:</code> التي تحوي محارف أقراصٍ استعمال المحرف <code>:</code> كفاصل بعد محرف القرص مباشرةً. سيؤدي استعمال محرف فاصل آخر إلى رمي خطأ.
في جميع المنصات الأخرى، العناوين URL ذات البروتوكول <code>file:</code> مع اسم مضيف غيرَ مدعومةٍ وسيؤدي استعمالها بهذا الشكل إلى رمي خطأ:
<syntaxhighlight lang="javascript">// :في المنصات الأخرى
// - مع اسم المضيف غير مدعومة file: ذات البروتوكول URL العناوين
// file://hostname/p/a/t/h/file => !رمي خطأ
fs.readFileSync(new URL('file://hostname/p/a/t/h/file'));
// إذ يجب أن يكون العنوان مطلقًا TypeError [ERR_INVALID_FILE_URL_PATH] سيرمى الخطأ
// - إلى مسارات مطلقة file: ذات البرتوكول URL تحوَّل العناوين
// file:///tmp/hello => /tmp/hello
fs.readFileSync(new URL('file:///tmp/hello'));
يؤدي استعمال العناوين URL ذات البروتوكول file:
التي تحوي محارف الخط المائل المرمزة إلى رمي خطأ في جميع المنصات:
// في ويندوز
fs.readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
fs.readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
// إذ لا يجب أن TypeError [ERR_INVALID_FILE_URL_PATH] سيرمى الخطأ
// الذي يمثل مسار ملف على المحارف \ أو / بعد ترميزها URL يحوي عنوان
// POSIX في أنظمة
fs.readFileSync(new URL('file:///p/a/t/h/%2F'));
fs.readFileSync(new URL('file:///p/a/t/h/%2f'));
// إذ لا يجب أن TypeError [ERR_INVALID_FILE_URL_PATH] سيرمى الخطأ
// الذي يمثل مسار ملف على المحارف / بعد ترميزها URL يحوي عنوان
في ويندوز، سيؤدي استعمال العناوين URL ذات البروتوكول file:
التي تحوي محارف الخط المائل العكسي المرمزة إلى رمي خطأ:
// في ويندوز
fs.readFileSync(new URL('file:///C:/path/%5C'));
fs.readFileSync(new URL('file:///C:/path/%5c'));
// إذ لا يجب أن TypeError [ERR_INVALID_FILE_URL_PATH] سيرمى الخطأ
// الذي يمثل مسار ملف على المحارف \ أو / بعد ترميزها URL يحوي عنوان
واصفات الملف (File Descriptors)
في الأنظمة المتوافقة مع POSIX، تحتفظ النواة بجدول للملفات والموارد المفتوحة حاليًا لكل عملية. يُسنَد كل ملف مفتوح إلى إلى معرِّف عددي بسيط يدعى «واصف الملف» (file descriptor). إن تحدثنا على مستوى النظام، نجد أنَّ جميع عمليات نظام الملفات تستعمل واصفات الملفات هذه لتحدِّد وتتتبَّع كل ملف بعينه. يستعمل نظام ويندوز طريقةً مختلفةً ولكنها شبيهة نظريًا بالآلية التي ذكرناها لتعقُّب الموارد. لتبسيط الأشياء للمستخدمين، عمدت Node.js إلى إزالة مثل هذه الاختلافات بين أنظمة التشغيل وإسناد جميع الملفات المفتوحة إلى واصفات ملف عددية.
يُستعمَل التابع fs.open()
لتخصيص واصف ملف جديد للملف المراد فتحه. متى ما خُصِّض واصف للملف، يمكن استعماله لقراءة بيانات من، أو كتابة بيانات على، أو طلب معلومات عن هذا الملف.
fs.open('/open/some/file.txt', 'r', (err, fd) => {
if (err) throw err;
fs.fstat(fd, (err, stat) => {
if (err) throw err;
// use stat
// always close the file descriptor!
fs.close(fd, (err) => {
if (err) throw err;
});
});
});
تخصِّص أغلب أنظمة التشغيل مجالًا محدودًا من الأعداد لاستعمالها كواصفاتٍ للملفات التي قد تُفتَح في أي وقت، لذا فإنَّ إغلاق الواصف بعد اكتمال العملية أمرٌ بالغ الأهمية. سيؤدي إهمال أو فشل إغلاق واصفات الملفات إلى حدوث تسريب في الذاكرة (memory leak) ينتهي بانهيار التطبيق.
استعمال مجمع الخيوط (Threadpool Usage)
تستعمل جميع واجهات نظام الملفات البرمجية باستثناء fs.FSWatcher()
وتلك التي يظهر أنها تُستعمَل بشكل متزامن مجمع الخيوط الخاص بالمكتبة libuv والذي يمكن أن يكون يكون له تأثيرات مفاجئة وسلبية على بعض التطبيقات. اطلع إلى توثيق خيار سطر الأوامر UV_THREADPOOL_SIZE
للمزيد من التفاصيل.
الصنف fs.Dirent
أضيف في الإصدار: v10.10.0.
عندما يُستدعَى التابع fs.readdir()
أو التابع fs.readdirSync()
مع ضبط قيمة الخيار withFileTypes
فيه إلى القيمة true
، ستُملَأ المصفوفة الناتجة بالكائنات fs.Dirent
بدلًا من السلاسل النصية أو الكائنات Buffer
.
dirent.isBlockDevice()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل جهازًا كتليًّا (block device)، أو القيمة false
خلا ذلك.
dirent.isCharacterDevice()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل جهازًا محرفيًّا (character device)، أو القيمة false
خلا ذلك.
dirent.isDirectory()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل مجلَّدًا في نظام الملفات (file system directory)، أو القيمة false
خلا ذلك.
dirent.isFIFO()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل الأنبوب FIFO (اختصار للعبارة first-in-first-out أي «من دخل أولًا يخرج أولًا»، كما يدعى أحيانًا «أنبوبًا مسمًى») ، أو القيمة false
خلا ذلك.
dirent.isFile()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل ملفًا طبيعيًّا، أو القيمة false
خلا ذلك.
dirent.isSocket()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل مقبسًا (socket)، أو القيمة false
خلا ذلك.
dirent.isSymbolicLink()
أضيف في الإصدار: v10.10.0.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Dirent
يمثِّل وصلةً رمزيَّةً (symbolic link)، أو القيمة false
خلا ذلك.
dirent.name
أضيفت في الإصدار: v10.10.0.
تمثل هذه الخاصية اسم الملف الذي يشير إليه الكائن fs.Dirent
. يُحدَّد نوع هذه القيمة عبر options.encoding
الممرَّر إلى fs.readdir()
أو fs.readdirSync()
.
الصنف fs.FSWatcher
أضيف في الإصدار: v0.5.8.
سيعيد الاستدعاء الناجح للتابع fs.watch()
كائنًا جديدًا من النوع fs.FSWatcher
.
الكائن fs.FSWatcher
هو مطلقٌُ للأحداث (EventEmitter)، إذ يُطلِق الحدث 'change'
كلما عُدِّل ملفٌ مراقبٌ.
الحدث 'change'
أضيف في الإصدار: v0.5.8.
eventType
: <string> نوع حدث «التغيير» الذي حصل.filename
: <string> | <Buffer> اسم الملف الذي حصل تغيير فيه (إن كان متاحًا).
يُطلَق هذا الحدث عندما يتغير شيء في المجلَّد أو الملف المراقب. يوجد المزيد من التفاصيل في توثيق التابع fs.watch()
في الأسفل.
قد لا يكون الوسيط filename
متوافرًا وهذا يعتمد على دعم نظام التشغيل. إن أعطي الوسيط filename
، فسيُعطَى بوصفه كائنًا من النوع Buffer
إن استُدعَي التابع fs.watch()
مع ضبط الخيار encoding
إلى القيمة 'buffer'
؛ خلا ذلك، سيُعطَى الوسيط filename
في سلسلة نصية مرمزة بالترميز UTF-8.
// fs.watch() إضافة معالج حدث عبر مستمع
fs.watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
if (filename) {
console.log(filename);
// <Buffer ...> :سيُطبَع
}
});
الحدث 'error'
أضيف في الإصدار: v10.10.0.
يُطلَق هذا الحدث متى ما توقف المراقب (watcher) عن مراقبة التغييرات. لن يكون الكائن fs.FSWatcher
قابلًا للاستعمال في معالج الحدث بعد إغلاقه.
الحدث 'close'
أضيف في الإصدار: v0.5.8.
error
: <Error>
يُطلَق هذا الحدث عندما يحدث خطأٌ أثناء عملية مراقبة الملف. لن يكون الكائن fs.FSWatcher
الذي حصل خطأٌ فيه قابلًا للاستعمال في معالج الحدث.
watcher.close()
أضيف في الإصدار: v0.5.8. يوقف هذا التابع عملية مراقبة التغييرات في الكائن fs.FSWatcher
المعطى. متى ما استدعي هذا التابع، لن يعد الكائن fs.FSWatcher
المُمرَّر إليه قابلًا للاستعمال بعد ذلك الحين.
الصنف fs.ReadStream
أضيف في الإصدار: v0.1.9.3.
سيعيد الاستدعاء الناجح للتابع fs.createReadStream()
كائنًا جديدًا من النوع fs.ReadStream
. تُعدُّ جميع الكائنات fs.ReadStream
مجارٍ قابلةٍ للقراءة (Readable Streams).
الحدث 'close'
أضيف في الإصدار: v0.1.93.
يُطلَق هذا الحدث عندما يُغلَق واصف الملف الموجود ضمنيًّا في الكائن fs.ReadStream
.
الحدث 'open'
أضيف في الإصدار: v0.1.93.
fd
: <integer> عدد صحيح يمثل واصف الملف الذي استعمله الكائنReadStream
.
يُطلَق هذا الحدث عندما يُفتَح واصف الملف للكائن fs.ReadStream
.
الحدث 'ready'
أضيف في الإصدار: v9.11.0. يُطلَق هذا الحدث عندما يكون الكائن fs.ReadStream
جاهزًا للاستعمال؛ أي يُطلَق بعد الحدث 'open'
مباشرةً.
readStream.bytesRead
أضيفت في الإصدار: v6.4.0.
تمثِّل هذه الخاصية عدد البايتات التي قُرأَت حين استدعائها.
readStream.path
أضيفت في الإصدار: v0.1.93.
تمثِّل هذه الخاصية مسار الملف الذي يُقرَأ المجرى منه كما حُدِّد في الوسيط الأول المُمرَّر إلى fs.createReadStream()
. إن كان المسار path
المُمرَّر سلسلةً نصيةً، فستعيد الخاصية readStream.path
سلسلةً نصيةً أيضًا. أمَّا إن كان المسار path
المُمرَّر كائنًا من النوع Buffer
، فستعيد الخاصية readStream.path
كائنًا من النوع Buffer
أيضًا.
الصنف fs.Stats
الإصدار | التغييرات |
---|---|
v8.1.0 | أضيفت الأزمنة كأعداد. |
v0.1.21 | أضيف هذا الصنف. |
يوفِّر الكائن fs.Stats
معلومات عن أي ملف. جميع الكائنات المعادة من التوابع fs.stat()
، و fs.lstat()
، و fs.fstat()
، ونظيراتها المتزامنة هي من هذا الصنف. إن كانت قيمة الخيار bigint
في الوسيط options
المُمرَّر إلى هذه التوابع هي true
، فستكون القيم العددية من النوع bigint
بدلًا من number
.
Stats {
dev: 2114,
ino: 48064969,
mode: 33188,
nlink: 1,
uid: 85,
gid: 100,
rdev: 0,
size: 527,
blksize: 4096,
blocks: 8,
atimeMs: 1318289051000.1,
mtimeMs: 1318289051000.1,
ctimeMs: 1318289051000.1,
birthtimeMs: 1318289051000.1,
atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
سيُعاد المثال السابق ولكن مع ضبط الخيار bigint
في الوسيط options
إلى القيمة true
:
Stats {
dev: 2114n,
ino: 48064969n,
mode: 33188n,
nlink: 1n,
uid: 85n,
gid: 100n,
rdev: 0n,
size: 527n,
blksize: 4096n,
blocks: 8n,
atimeMs: 1318289051000n,
mtimeMs: 1318289051000n,
ctimeMs: 1318289051000n,
birthtimeMs: 1318289051000n,
atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
stats.isBlockDevice()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل جهازًا كتليًّا (block device)، أو القيمة false
خلاف ذلك.
stats.isCharacterDevice()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل جهازًا محرفيًّا (character device)، أو القيمة false
خلاف ذلك.
stats.isDirectory()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل مجلَّدًا في نظام الملفات (file system directory)، أو القيمة false
خلاف ذلك.
stats.isFIFO()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل الأنبوب FIFO (اختصارٌ للعبارة first-in-first-out أي «من دخل أولًا يخرج أولًا»، كما يدعى أحيانًا «أنبوبًا مسمًى»)، أو القيمة false
خلاف ذلك.
stats.isFile()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل ملفًا طبيعيًّا، أو القيمة false
خلاف ذلك.
stats.isSocket()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل مقبسًا (socket)، أو القيمة false
خلاف ذلك.
stats.isSymbolicLink()
أضيف في الإصدار: v0.1.10.
- القيم المعادة: <boolean>
يعيد هذا التابع القيمة true
إن كان الكائن fs.Stats
يمثِّل وصلةً رمزيَّةً (symbolic link)، أو القيمة false
خلاف ذلك.
stats.dev
تمثِّل هذه الخاصية المعرِّف العددي للجهاز الذي يحوي الملف.
stats.ino
تمثِّل هذه الخاصية رقم مؤشِّر الفهرسة (inode) لنظام الملفات المحدَّد.
stats.mode
تمثِّل هذه الخاصية حقلًا بتيًّا (bit-field) يصف نوع الملف ووضعه.
stats.nlink
تمثِّل هذه الخاصية عدد الوصلات الصلبة (hard-links) الموجود للملف.
stats.uid
تمثِّل هذه الخاصية معرِّف المستخدم العددي (UID) للمستخدم المالك للملف (في أنظمة POSIX).
stats.gid
تمثِّل هذه الخاصية معرِّف المجموعة العددي (GID) للمجموعة المالكة للملف (في أنظمة POSIX).
stats.rdev
تمثِّل هذه الخاصية معرِّف الجهاز العددي إن عُدَّ الملف «خاصًّا» (special).
stats.size
تمثِّل هذه الخاصية حجم الملف بالبايت.
stats.blksize
تمثِّل هذه الخاصية حجم الكتلة (block size) لنظام الملفات من أجل عمليات الإدخال والإخراج (i/o).
stats.blocks
تمثِّل هذه الخاصية عدد الكتل المحجوزة لهذا الملف.
stats.atimeMs
أضيفت في الإصدار: v8.1.0.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى آخر وقت تم الوصول فيه إلى هذا الملف معبَّرًا عنها بالميلي ثانية منذ عهد POSIX.
stats.mtimeMs
أضيفت في الإصدار: v8.1.0.
تمثِّل هذه الخاصية بصمة الوقت (timestamp) التي تشير إلى آخر وقت عُدِّل فيه هذا الملف معبَّرًا عنها بالميلي ثانية منذ عهد POSIX.
stats.ctimeMs
أضيفت في الإصدار: v8.1.0.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى آخر وقت عُدِّلَت فيه حالة هذا الملف معبَّرًا عنها بالميلي ثانية منذ عهد POSIX.
stats.birthtimeMs
أضيفت في الإصدار: v8.1.0.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى وقت إنشاء هذا الملف معبَّرًا عنها بالميلي ثانية منذ عهد POSIX.
stats.atime
أضيفت في الإصدار: v0.11.13.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى آخر وقت تم الوصول فيه إلى هذا الملف.
stats.mtime
أضيفت في الإصدار: v0.11.13.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى آخر وقت عُدِّل فيه هذا الملف.
stats.ctime
أضيفت في الإصدار: v0.11.13.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى آخر وقت عُدِّلَت فيه حالة هذا الملف.
stats.birthtime
أضيفت في الإصدار: v0.11.13.
تمثِّل هذه الخاصية بصمة وقت (timestamp) تشير إلى وقت إنشاء هذا الملف.
قيم الوقت في الكائن Stats
إن جميع الخاصيات atimeMs
، و mtimeMs
، و ctimeMs
، و birthtimeMs
هي أعدادٌ تمثِّل أزمنةً بالميلي ثانية، وتعتمد دقتها على المنصة المستعملة. أمَّا الخاصيات atime
، و mtime
، و ctime
، و birthtime
، فهي كائنات من النوع Date
(أي تواريخ) تمثل أزمنةً وأوقاتًا مختلفةً. انتبه إلى أنَّ قيم الكائن Date
(التاريخ) والكائن number
(الزمن) -لتلك الخاصيات- غير مترابطة مع بعضها بعضًا؛ أي إسناد قيمةٌ جديدةٌ لأحدهما لن ينعكس على القيمة المقابلة البديلة للآخر.
الأوقات في الكائن Stats
لها الدلالات التالية:
atime
(وقت الوصول): يمثِّل هذا الوقت آخر مرةٍ جرى فيها الوصول إلى البيانات. يتغيَّر باستعمال استدعاءات النظامmknod(2)
، وutimes(2)
، وread(2)
.atime
(وقت التعديل): يمثِّل هذا الوقت آخر عملية تعديل أجريَت على البيانات. يتغيَّر باستعمال استدعاء النظامmknod(2)
، وutimes(2)
، وwrite(2)
.atime
(وقت التغيير): يمثِّل هذا الوقت آخرة مرةٍ تغيَّرَت فيها حالة الملف (تعديل بيانات مؤشِّر الفهرسة [inode]). يتغيَّر عبر استدعاءات النظامchmod(2)
، وchown(2)
، وlink(2)
، وmknod(2)
، وrename(2)
، وunlink(2)
وutimes(2)
، وread(2)
، وwrite(2)
.atime
(وقت الإنشاء): يمثِّل وقت إنشاء الملف، إذ يُضبَط هذا الوقت عندما يُنشَأ الملف. في أنظمة الملفات التي لا يتوافر فيها وقت الإنشاء، قد يأخذ هذا الحقل قيمةً بديلةً هي إمَّا القيمةctime
أو القيمة1970-01-01T00:00Z
(أي بصمة الوقت0
في توقيت يونكس). في هذه الحالة، قد تكون هذه القيمة أكبر من القيمةatime
أوmtime
. في نظام التشغيل Darwin وتوزيعات FreeBSD أخرى، تُضبَط هذه القيمة أيضًا إذا ضُبِطَت القيمةatime
بشكل واضح إلى قيمة سابقة للقيمةbirthtime
الحالية باستعمال استدعاء النظامutimes(2)
.
قبل الإصدار Node.js 0.12، تأخذ القيمة ctime
نفس القيمة birthtime
في أنظمة ويندوز. بدءًا من الإصدار 0.12، لم تعد القيمة ctime
تمثل «وقت الإنشاء»، ولم تكن كذلك مطلقًا في الأنظمة الشبيه بيونكس.
الصنف fs.WriteStream
أضيف في الإصدار: v0.1.93.
يمثل الكائن WriteStream
مجرًى قابلًا للكتابة.
الحدث 'close'
أضيف في الإصدار: v0.1.93.
يُطلَق هذا الحدث عندما يُغلَق واصف الملف الموجود ضمنيًّا في الكائن WriteStream
.
الحدث 'open'
أضيف في الإصدار: v0.1.93.
fd
: <integer> عدد صحيح يمثل واصف الملف الذي استعمله الكائنWriteStream
.
يُطلَق هذا الحدث عندما يُفتَح واصف الملف للكائن WriteStream
.
الحدث 'ready'
أضيف في الإصدار: v9.11.0.
يُطلَق هذا الحدث عندما يكون الكائن WriteStream
جاهزًا للاستعمال؛ أي يُطلَق بعد الحدث 'open'
مباشرةً.
writeStream.bytesWritten
أضيفت في الإصدار: v0.4.7.
تمثِّل هذه الخاصية عدد البايتات التي كُتبَت حين استدعائها. لا تتضمن هذه القيمة حجم البيانات الموجودة في الطابور بانتظار كتابتها.
readStream.path
أضيفت في الإصدار: v0.1.93.
تمثِّل هذه الخاصية مسار الملف الذي يُكتَب المجرى فيه كما حُدِّد في الوسيط الأول المُمرَّر إلى fs.createWriteStream()
. إن كان المسار path
المُمرَّر سلسلةً نصيةً، فستعيد الخاصية writeStream.path
سلسلةً نصيةً أيضًا. أمَّا إن كان المسار path
المُمرَّر كائنًا من النوع Buffer
، فستعيد الخاصية writeStream.path
كائنًا من النوع Buffer
أيضًا.
fs.access(path[, mode], callback)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمل البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v6.3.0 | نُقلَت الثوابت مثل fs.R_OK وغيرها التي توجد مباشرةً في fs إلى fs.constants كإهمال مرن وسلسل. وبالتالي، استعمل fs في الإصدارات التي قبل v6.3.0 للوصول إلى هذه الثوابت، أو افعل شيئًا آخر مثل (fs.constants || fs).R_OK للعمل مع جميع الإصدارات بطريقة واحدة.
|
v0.11.15 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>mode
: <integer> القيمة الافتراضية هي:fs.constants.F_OK
.callback
: <Function>err
: <Error>
يفحص هذا التابع أذونات المستخدم للملف أو المجلد المحدَّد في المسار path
. الوسيط mode
الاختياري هو عددٌ صحيحٌ يحدِّد عمليات التحقق من قابلية الوصول المراد تنفيذها. اطلع على القسم «ثوابت الوصول للملف» لمعرفة القيمة المتاحة للوسيط mode
. يمكن إنشاء قناع يتألف من ثابتين أو أكثر عبر عملية الدمج الثنائية (bitwise) باستعمال المعامل OR (مثل fs.constants.W_OK | fs.constants.R_OK
).
الوسيط الأخير، callback
، هو دالة رد نداءٍ تُستدعَى مع وسيط الخطأ المحتمل حدوثه. إن فشلت إحدى عمليات التحقق من قابلية الوصول، فسيكون وسيط الخطأ الكائن Error
. يتحقق المثال التالي من وجود الملف package.json
وإن كان قابلًا للقراءة أو الكتابة:
const file = 'package.json';
// التحقق من وجود الملف في المجلد الحالي
fs.access(file, fs.constants.F_OK, (err) => {
console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
});
// التحقق من كون الملف قابلًا للقراءة
fs.access(file, fs.constants.R_OK, (err) => {
console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);
});
// التحقق من كون الملف قابلًا للكتابة
fs.access(file, fs.constants.W_OK, (err) => {
console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);
});
// التحقق من وجود الملف في المجلد الحالي ومن كونه قابلًا للقراءة
fs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {
if (err) {
console.error(
`${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);
} else {
console.log(`${file} exists, and it is writable`);
}
});
لا يُنصَح باستدعاء fs.access()
للتحقُّق من قابلة الوصول للملف قبل استدعاء fs.open()، أو fs.readFile()، أو fs.writeFile()، إذ يؤدي فعل ذلك إلى خلق «حالة تسابق» (race condition) لأنَّه ربما قد تُغيِّر عمليات أخرى حالة الملف بين الاستدعائين. بدلًا من ذلك، يجب على شيفرة المستخدم أن تفتح وتقرأ وتكتب في الملف مباشرةً وأن تعالج أي خطأ يُطلَق إن لم يكن الملف قابلًا للوصول.
يوضح المثال التالي كيفية الكتابة على ملف بطريقةٍ لا يوصى بها:
fs.access('myfile', (err) => {
if (!err) {
console.error('myfile already exists');
return;
}
fs.open('myfile', 'wx', (err, fd) => {
if (err) throw err;
writeMyData(fd);
});
});
أمَّا المثال التالي، فيُوضِّح كيفية القراءة من ملف بالطريقة المُثلَى:
fs.open('myfile', 'wx', (err, fd) => {
if (err) {
if (err.code === 'EEXIST') {
console.error('myfile already exists');
return;
}
throw err;
}
writeMyData(fd);
});
يوضح المثال التالي كيفية القراءة من ملف بطريقة لا يوصى بها:
fs.access('myfile', (err) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('myfile does not exist');
return;
}
throw err;
}
fs.open('myfile', 'r', (err, fd) => {
if (err) throw err;
readMyData(fd);
});
});
أمَّا المثال التالي، فيُوضِّح كيفية القراءة من ملف بالطريقة المُثلَى:
fs.open('myfile', 'r', (err, fd) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('myfile does not exist');
return;
}
throw err;
}
readMyData(fd);
});
تتحقَّق الأمثلة التي «لا يوصى باتباعها» من قابلة الوصول ثمَّ تستعمل الملف؛ أمَّا الأمثلة التي «يوصى باتباعها»، فهي أفضل لأنَّها تستعمل الملف مباشرةً وتعالج الخطأ إن حصل.
عمومًا، يُتحقَّق من قابلة الوصول للملف في حال استعمال الملف بشكل غير مباشر مثل عندما تكون قابلية وصول ملف إشارةً من عملية أخرى.
fs.accessSync(path[, mode])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمل البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.11.15 | أضيف هذا التابع. |
يفحص هذا التابع بشكل متزامن أذونات المستخدم للملف أو المجلد المحدَّد في المسار path
. الوسيط mode
الاختياري هو عدد صحيح يحدِّد عمليات التحقُّق من قابلية الوصول المراد تنفيذها. اطلع على القسم «ثوابت الوصول للملف» لمعرفة القيمة المتاحة للوسيط mode
. يمكن إنشاء قناع يتألف من ثابتين أو أكثر عبر عملية الدمج الثنائية (bitwise) باستعمال المعامل OR (مثل fs.constants.W_OK | fs.constants.R_OK
).
إن فشلت إحدى عمليات قابلية الوصول، فيُسرمَى الخطأ Error
. خلا ذلك، سيعيد التابع القيمة undefined
.
try {
fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
console.log('can read/write');
} catch (err) {
console.error('no access!');
}
fs.appendFile(path, data[, options], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v7.0.0 | لن يُغيَّر المعامل options المُمرَّر مطلقًا.
|
v5.0.0 | يمكن للمعامل file أن يكون واصف ملفٍ الآن.
|
v0.6.7 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL> | <number> اسم أو واصف الملف.data
: <string> | <Buffer>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mode
: <integer> القيمة الافتراضية هي:0o666
.mode
: <string> ارجع إلى القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'a'
.
callback
: <Function>err
: <Error>
يضيف هذا التابع بشكل غير متزامن بياناتٍ إلى ملف، أو ينشئ ملفًا ويضع البيانات فيه إن لم يكن هذا الملف موجودًا. يمكن أن تكون البيانات data
المراد كتابتها سلسلةً نصيةً أو كائنًا من النوع Buffer
.
fs.appendFile('message.txt', 'data to append', (err) => {
if (err) throw err;
console.log('The "data to append" was appended to file!');
});
إن كان الوسيط options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز:
fs.appendFile('message.txt', 'data to append', 'utf8', callback);
يمكن أن يُعطَى المسار path
قيمةً عدديةً تمثِّل واصف الملف الذي فُتِح لإضافة البيانات فيه (باستعمال fs.open()
أو fs.openSync()
). لن يُغلَق واصف الملف بشكل تلقائي.
fs.open('message.txt', 'a', (err, fd) => {
if (err) throw err;
fs.appendFile(fd, 'data to append', 'utf8', (err) => {
fs.close(fd, (err) => {
if (err) throw err;
});
if (err) throw err;
});
});
fs.appendFileSync(path, data[, options])
الإصدار | التغييرات |
---|---|
v7.0.0 | لن يُغيِّر المعامل options المُمرَّر مطلقًا.
|
v5.0.0 | يمكن للمعامل file أن يكون واصف ملفٍ الآن.
|
v0.6.7 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL> | <number> اسم أو واصف الملف.data
: <string> | <Buffer>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mode
: <integer> القيمة الافتراضية هي:0o666
.mode
: <string> ارجع إلى القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'a'
.
يضيف هذا التابع بشكل متزامن بياناتٍ إلى ملف، أو ينشئ ملفًا ويضع البيانات فيه إن لم يكن هذا الملف موجودًا. يمكن أن تكون البيانات data
المراد كتابتها سلسلةً نصيةً أو كائنًا من النوع Buffer
.
try {
fs.appendFileSync('message.txt', 'data to append');
console.log('The "data to append" was appended to file!');
} catch (err) {
// عالج الخطأ (إن حصل) هنا
}
إن كان الوسيط options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز:
fs.appendFileSync('message.txt', 'data to append', 'utf8');
يمكن أن يُعطَى المسار path
قيمةً عدديةً تمثُّل واصف الملف الذي فُتِح لإضافة البيانات فيه (باستعمال fs.open()
أو fs.openSync()
). لن يُغلَق واصف الملف بشكل تلقائي.
let fd;
try {
fd = fs.openSync('message.txt', 'a');
fs.appendFileSync(fd, 'data to append', 'utf8');
} catch (err) {
// عالج الخطأ (إن حصل) هنا
} finally {
if (fd !== undefined)
fs.closeSync(fd);
}
fs.chmod(path, mode, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.30 | أضيف هذا التابع. |
يغيِّر هذا التابع بشكل غير متزامن أذونات ملفٍ. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. انظر أيضًا الدالة chmod(2)
.
نمط الملف (File Mode)
الوسيط mode
المستعمل في التابعين fs.chmod()
و fs.chmodSync()
كلاهما هو قناع بتِّي عددي (numeric bitmask) يُنشَأ باستعمال المعامل OR المنطقي للثوابت التالية:
الثابت | القيمة الثمانية | الإذن |
---|---|---|
fs.constants.S_IRUSR
|
0o400
|
يمكن للمالك قراءة الملف. |
fs.constants.S_IWUSR
|
0o200
|
يمكن للمالك الكتابة على الملف. |
fs.constants.S_IXUSR
|
0o100
|
يمكن للمالك تنفيذ الملف أو البحث ضمنه. |
fs.constants.S_IRGRP
|
0o40
|
يمكن للمجموعة المالكة قراءة الملف. |
fs.constants.S_IWGRP
|
0o20
|
يمكن للمجموعة المالكة الكتابة على الملف. |
fs.constants.S_IXGRP
|
0o10
|
يمكن للمجموعة المالكة تنفيذ الملف أو البحث ضمنه. |
fs.constants.S_IROTH
|
0o4
|
يمكن للآخرين قراءة الملف. |
fs.constants.S_IWOTH
|
0o2
|
يمكن للآخرين الكتابة على الملف. |
fs.constants.S_IXOTH
|
0o1
|
يمكن للآخرين تنفيذ الملف أو البحث ضمنه. |
أسهل طريقة لضبط الوسيط mode
هي استعمال سلسلة من ثلاثة أعداد ثمانية (مثل العدد 765
). يحدِّد العدد في أقصى اليسار (هو 7 في مثالنا) أذونات مالك الملف، والعدد الذي في المنتصف (هو 6 في مثالنا) أذونات المجموعة المالكة، والعدد في أقصى اليمين (هو 5 في مثالنا) أذونات الأشخاص الآخرين.
العدد الثماني | الأذونات |
---|---|
7
|
القراءة والكتابة والتنفيذ. |
6
|
القراءة والكتابة. |
5
|
القراءة والتنفيذ. |
4
|
القراءة فقط. |
3
|
الكتابة والتنفيذ. |
2
|
الكتابة فقط. |
1
|
التنفيذ. |
0
|
لا يوجد أذونات. |
على سبيل المثال، القيمة الثمانية 0o765
تعني:
- يُسمَح للمالك بقراءة وكتابة وتنفيذ الملف.
- يُسمَح للمجموعة المالكة بالقراءة والكتابة على الملف.
- يُسمَح للآخرين بقراءة وتنفيذ الملف.
عند استعمال الأعداد المجرَّدة في المكان الذي يُتوقَّع فيه استعمال أنماط الملف، يؤدي استعمال أية قيمة أكبر من 0o777
إلى حدوث سلوكيات غير مدعومة تختلف باختلاف المنصة المستعملة؛ وبالتالي، ثوابتٌ مثل S_ISVTX
، و S_ISGID
، و S_ISUID
غيرُ موجودةٍ في fs.constants
. تحذير: في ويندوز، يمكن تغيير أذونات الكتابة فقط، ولا تؤخذ الاختلافات بين أذونات المجموعة المالكة، أو المالك، أو الآخرين بالحسبان.
fs.chmodSync(path, mode)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.30 | أضيف هذا التابع. |
يغيِّر هذا التابع بشكل متزامن أذونات ملفٍ. لمزيد من التفاصيل، ارجع إلى توثيق الإصدار غير المتزامن من هذه الواجهة البرمجية وهي fs.chmod()
.
انظر أيضًا الدالة chmod(2)
.
fs.chown(path, uid, gid, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.30 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>uid
: <integer>gid
: <integer>callback
: <Function>err
: <Error>
يغيِّر هذا التابع بشكل غير متزامن المالك والمجموعة المالكة لملف. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
انظر أيضًا: chown(2)
.
fs.chownSync(path, uid, gid)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.30 | أضيف هذا التابع. |
يغيِّر هذا التابع بشكل متزامن المالك والمجموعة المالكة لملف، أو يعيد القيمة undefined. هذا التابع هو النسخة المتزامنة من التابع fs.chown()
.
انظر أيضًا: chown(2)
.
fs.close(fd, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.30 | أضيف هذا التابع. |
fd
: <integer>callback
: <Function>err
: <Error>
يغلق هذا التابع بشكل غير متزامن ملفًا مفتوحًا، إذ يُنفِّذ دالة النظام close(2)
. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.closeSync(fd)
أضيف في الإصدار: v0.1.21.
fd
: <integer>
يغلق هذا التابع بشكل متزامن ملفًا مفتوحًا، إذ يُنفِّذ دالة النظام close(2)
. يعيد القيمة undefined
.
fs.constants
يعيد هذا التابع كائنًا يحوي الثوابت الأكثر استعمالًا في عمليات نظام الملفات. الثوابت المعرَّفة حاليًا تجدها مع شرحٍ لها في القسم «الثوابت المستعملة في الوحدة fs
» في الأسفل.
fs.copyFile(src, dest[, flags], callback)
أضيف في الإصدار:v8.5.0.
src
: <string> | <Buffer> | <URL> اسم الملف المراد نسخه.dest
: <string> | <Buffer> | <URL> اسم الملف الوجهة الذي سيُنسَخ في الملف المحدَّد في المعامل src.flags
: <number> مُعدِّلات (modifiers) عملية النسخ. القيمة الافتراضية هي: 0.callback
: <Function>
ينسخ هذا التابع ملفًا من src
إلى dest
بشكل غير متزامن. تُستبدَل قيمة الوسيط dest
إن كانت موجودة مسبقًا بشكل افتراضي. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. لا تعطِ Node.js أية ضمانات متعلقة بتجزئة عملية النسخ. إن حصل أي خطأ بعد فتح الملف الوجهة للكتابة، ستحاول Node.js إزالته.
الوسيط flags
اختياري وهو عددٌ صحيحٌ يحدِّد سلوك عملية النسخ. يمكن إنشاء قناع يتألف من ثابتين أو أكثر عبر عملية الدمج الثنائية (bitwise) باستعمال المعامل OR (مثل fs.constants.COPYFILE_FICLONE | fs.constants.COPYFILE_EXCL
). الثوابت المدعومة هي:
fs.constants.COPYFILE_EXCL
: ستفشل عملية النسخ إن كان الملفdest
موجودًا من قبل.
fs.constants.COPYFILE_FICLONE
: ستحاول عملية النسخ إنشاء وصلة مرجعية (reflink) بنمط «النسخ عند الكتابة» (copy-on-write). إن لم تدعم المنصة نمط «النسخ عند الكتابة»، فستُستخدَم آلية النسخ التراجعي (fallback copy).
fs.constants.COPYFILE_FICLONE
: ستحاول عملية النسخ إنشاء وصلة مرجعية (reflink) بنمط «النسخ عند الكتابة» (copy-on-write). إن لم تدعم المنصة نمط «النسخ عند الكتابة»، فستفشل عملية النسخ.
const fs = require('fs');
// أو سيُستبدَل بشكل افتراضي destination.txt سيُنشَأ الملف
fs.copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');
إن كان الوسيط الأخير عددًا، فهو يحدِّد الوسيط flags
:
const fs = require('fs');
const { COPYFILE_EXCL } = fs.constants;
// موجودًا من قبل destination.txt ستفشل العملية إن كان الملف ،COPYFILE_EXCL باستخدام الثابت
fs.copyFileSync('source.txt', 'destination.txt', COPYFILE_EXCL);
fs.createReadStream(path[, options])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لن يُغيِّر المعامل options المُمرَّر مطلقًا.
|
v2.3.0 | يمكن أن يكون المعامل options المُمرَّر سلسلة نصية الآن.
|
v0.1.31 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object> | <string>flags
: <string> ارجع إلى القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'r'
.encoding
: <string> القيمة الافتراضية هي:null
.fd
: <integer> القيمة الافتراضية هي:null
.mode
: <integer> القيمة الافتراضية هي:0o666
.autoClose
: <boolean> القيمة الافتراضية هي:true
.start
: <integer>end
: <integer> القيمة الافتراضية هي:Infinity
.highWaterMark
: <integer> القيمة الافتراضية هي:64 * 1024
.
- القيم المعادة: <fs.ReadStream> انظر القسم «المجاري القابلة للقراءة» في توثيق الوحدة
stream
.
المجرى المُعاد باستعمال هذا التابع يملك القيمة 64 كيلو بت الافتراضية للوسيط highWaterMark
خلافًا للمجرى القابل للقراءة الذي يملك القيمة 16 كيلو بت فقط لذلك الوسيط.
يمكن أن يتضمن الوسيط options
الخيارين start
و end
لقراءة مجالٍ محدَّدٍ من البايتات من الملف بدلًا من قراءته كاملًا. يدخل الوسيطين start
و end
كلاهما ضمن المجال، ويبدأ الوسيط من القيمة 0. إن حُدِّد الوسيط fd
ولم يُعطَ الوسيط start
أو كانت قيمته undefined
، فسيقرأ التابع fs.createReadStream()
بالتسلسل بدءًا من موقع المؤشر الحالي للملف. يمكن أن يكون الوسيط encoding
أيًّا من الترميزات المقبولة في الصنف Buffer
.
إن أعطي الوسيط fd
، فسيتجاهل ReadStream
الوسيط path
ويستخدم واصف الملف المعطى. هذا يعني أنَّه لن يُطلَق الحدث 'open'
. يجب أن يكون واصف الملف fd
المعطى محجوزًا. يجب أن يمرَّر واصف الملف غير المحجوز إلى net.Socket
.
إن كان واصف الملف fd
يشير إلى جهاز محرفي (character device) يدعم وضع القراءة المحجوزة (blocking reads) فقط (مثل لوحة المفاتيح أو بطاقة الصوت)، فلن تنتهي عملية القراءة حتى تتوافر البيانات. هذا يساعد بمنع العملية من الخروج والمجرى من الإغلاق بشكل طبيعي.
const fs = require('fs');
// إنشاء مجرًى من بعض الأجهزة المحرفية
const stream = fs.createReadStream('/dev/input/event0');
setTimeout(() => {
stream.close(); // قد لا يُغلق هذا المجرى
// ؛ فإن أشار المورد(artificially marking) نهاية المجرى هي علامة اصطناعية
// .الضمني إلى نهاية الملف، فهذا سيسمح بإغلاق المجرى
// هذا لا يلغي عمليات الكتابة قيد الانتظار، وإذا كان هنالك مثل
// هذه العمليات، فربما لن تستطيع العملية الخروج بنجاح
// .حتى تنتهي
stream.push(null);
stream.read(0);
}, 100);
إن كانت قيمة الوسيط autoClose
هي false
، فلن يُغلَق واصف الملف حينئذٍ حتى لو حصل خطأ. في هذه الحالة، تقع مسؤولية إغلاق الملف على عاتق التطبيق والتأكد من عدم حصول تسريب في واصفات الملفات. إن ضُبِط الوسيط autoClose
إلى القيمة true
(السلوك الافتراضي)، فسيُغلَق واصف الملف تلقائيًّا متى ما أطلق الحدث 'error'
أو الحدث 'end'
.
يضبط الوسيط mode
نمط الملف (الأذونات والبتات اللاصقة [sticky bits]) في حال أنشئ الملف آنذاك فقط.
إليك مثالٌ يوضِّح كيفية قراءة آخر 10 بايتات من ملفٍ بحجم 100 بايت:
fs.createReadStream('sample.txt', { start: 90, end: 99 });
إن كان options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز.
fs.createWriteStream(path[, options])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لن يُغيِّر المعامل options المُمرَّر مطلقًا.
|
v2.3.0 | يمكن أن يكون المعامل options المُمرَّر سلسلة نصية الآن.
|
v0.1.31 | أضيف هذا التابع. |
- القيم المعادة: <fs.ReadStream> انظر القسم «المجاري القابلة للكتابة» في توثيق الوحدة
stream
.
يمكن أن يتضمن الوسيط options
الخيارstart
للسماح بكتابة البيانات في موضع محدِّد بعد تخطي عددٍ محدِّدٍ من البايتات الأولى. قد يتطلَّب تعديل الملف بدلًا من استبداله أن تكون قيمة الخيار flags
هي 'r+'
بدلًا من القيمة 'w'
الافتراضية. يمكن أن يكون الوسيط encoding
أيًّا من الترميزات المقبولة في الصنف Buffer
.
إن كانت قيمة الوسيط autoClose
هي false
، فلن يُغلَق واصف الملف حينئذٍ حتى لو حصل خطأ. في هذه الحالة، تقع مسؤولية إغلاق الملف على عاتق التطبيق والتأكد من عدم حصول تسريبٍ في واصفات الملفات. أمَّا إن ضُبِط الوسيط autoClose
إلى القيمة true
(السلوك الافتراضي)، فسيُغلَق واصف الملف تلقائيًّا متى ما أطلق الحدث 'error'
أو الحدث 'end'
.
إن أعطي الوسيط fd
، فسيتجاهل WriteStream
الوسيط path
ويستخدم واصف الملف المعطى. هذا يعني أنه لن يُطلَق الحدث 'open'
. يجب أن يكون واصف الملف fd
المعطى محجوزًا. يجب أن يمرَّر واصف الملف غير المحجوز إلى net.Socket
.
إن كان options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز.
fs.exists(path, callback)
الاستقرار: 0 - مهمل. استعمل التابع fs.stat()
أو fs.access()
بدلًا منه.
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v1.0.0 | أهمل هذا التابع. |
v0.0.2 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>callback
: <Function> القيمة الافتراضية هي:true
.exists
: <boolean>
يتحقق هذا التابع إن كان المسار المعطى موجودًا أم لا عبر التحقق من نظام الملفات ثم يستدعي الوسيط callback
إمَّا مع القيمة true
أو القيمة false
.
fs.exists('/etc/passwd', (exists) => {
console.log(exists ? 'it\'s there' : 'no passwd!');
});
ملاحظة: معاملات رد النداء هذا غير متناسقة مع معاملات ردود نداء Node.js الأخرى. الحالة السائدة هي أن يكون المعامل الأول لرد النداء في Node.js هو المعامل err
متبوعًا بمعاملات أخرى اختيارية. رد النداء في التابع fs.exists()
يملك معامل منطقي وحيد فقط. هذا هو أحد الأسباب التي يوصى من أجلها استعمال التابع fs.access()
عوضًا عن التابع fs.exists()
. لا يُنصَح باستعمال التابع fs.exists()
للتحقق من وجود ملفٍ قبل استدعاء fs.open()
، أو fs.readFile()
، أو fs.writeFile()
. يؤدي فعل ذلك إلى خلق «حالة سباق» (race condition) لأنه ربما قد تُغيِّر عمليات أخرى حالة الملف بين الاستدعائين. بدلًا من ذلك، يجب على شيفرة المستخدم أن تفتح وتقرأ وتكتب في الملف مباشرةً وأن تعالج أي خطأ يُطلَق إن لم يكن موجودًا.
يوضح المثال التالي كيفية الكتابة على ملف بطريقة لا يوصى بها:
fs.exists('myfile', (exists) => {
if (exists) {
console.error('myfile already exists');
} else {
fs.open('myfile', 'wx', (err, fd) => {
if (err) throw err;
writeMyData(fd);
});
}
});
أمَّا المثال التالي، فيوضح كيفية الكتابة على ملف بالطريقة المُثلَى:
fs.open('myfile', 'wx', (err, fd) => {
if (err) {
if (err.code === 'EEXIST') {
console.error('myfile already exists');
return;
}
throw err;
}
writeMyData(fd);
});
يوضح المثال التالي كيفية القراءة من ملف بطريقة لا يوصى بها:
fs.exists('myfile', (exists) => {
if (exists) {
fs.open('myfile', 'r', (err, fd) => {
if (err) throw err;
readMyData(fd);
});
} else {
console.error('myfile does not exist');
}
});
أمَّا المثال التالي، فيوضِّح كيفية القراءة من ملف بالطريقة المُثلَى:
fs.open('myfile', 'r', (err, fd) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('myfile does not exist');
return;
}
throw err;
}
readMyData(fd);
});
تتحقق الأمثلة التي «لا يوصى باتباعها» من وجود الملف ثم تستعمله؛ أمَّا الأمثلة التي «يوصى باتباعها»، فهي أفضل لأنَّها تستعمل الملف مباشرةً وتعالج الخطأ إن حصل.
عمومًا، يُتحقَّق من وجود الملف في حال استُعمِل الملف بشكل غير مباشر مثل عندما يكون وجود ملف إشارةً من عملية أخرى.
fs.existsSync(path)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
يعيد التابع القيمة true
إن كان المسار موجودًا، أو القيمة false
خلا ذلك. لتفاصيل أوسع، انظر توثيق النسخة الغير متزامنة من هذا التابع وهي التابع fs.exists()
.
انتبه إلى أنَّ التابع fs.exists()
مهمل، ولكن التابع fs.existsSync()
غير مهمل. المعامل callback
المُمرَّر إلى fs.exists()
يقبل معاملات تعد غير متناسقة مع معاملات ردود النداء الأخرى في Node.js.
لا يستعمل التابع fs.existsSync()
رد نداءٍ.
fs.fchmod(fd, mode, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.4.7 | أضيف هذا التابع. |
fd
: <integer>mode
: <integer>callback
: <Function>err
: <Error>
يغيِّر هذا التابع نمط الملف (file mode) عبر استدعاء النظام fchmod(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.fchmodSync(fd, mode)
أضيف في الإصدار: v0.4.7.
يغيِّر هذا التابع نمط الملف (file mode) عبر استدعاء النظام fchmod(2)
بشكل متزامن.
fs.fchown(fd, uid, gid, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.4.7 | أضيف هذا التابع. |
fd
: <integer>uid
: <integer>gid
: <integer>callback
: <Function>err
: <Error>
يغيِّر هذا التابع المستخدم المالك للملف عبر استدعاء النظام fchown(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.fchownSync(fd, uid, gid)
أضيف في الإصدار: v0.4.7.
يغيِّر هذا التابع المستخدم المالك للملف عبر استدعاء النظام fchown(2)
بشكل متزامن. يعيد هذا التابع القيمة undefined
.
fs.fdatasync(fd, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.96 | أضيف هذا التابع. |
fd
: <integer>callback
: <Function>err
: <Error>
ينفِّذ هذا التابع استدعاء النظام fdatasync(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.fdatasyncSync(fd)
أضيف في الإصدار: v0.1.96.
fd
: <integer>
ينفِّذ هذا التابع استدعاء النظام fdatasync(2)
بشكل متزامن. يعيد هذا التابع القيمة undefined
.
fs.fstat(fd[, options], callback)
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.95 | أضيف هذا التابع. |
fd
: <integer>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
callback
: <Function>err
: <Error>
stats
: <fs.Stats>
يجلب هذا التابع معلومات حول الملف عبر استدعاء دالة النظام fstat(2)
بشكل غير متزامن. يمرَّر إلى دالة رد النداء وسيطين هما: err
، و stats
، إذ stats
هو الكائن fs.Stats
. التابع fstat()
ممائلٌ تمامًا للتابع stat()
باستثناء أنَّ الملف المراد جلب معلومات عنه يحدَّد عبر واصف الملف fd
.
fs.fstatSync(fd[, options])
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v0.1.95 | أضيف هذا التابع. |
fd
: <integer>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
- القيم المعادة: <fs.Stats>
يجلب هذا التابع معلومات حول الملف عبر استدعاء دالة النظام fstat(2)
بشكل متزامن.
fs.fsync(fd, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.95 | أضيف هذا التابع. |
fd
: <integer>callback
: <Function>err
: <Error>
ينفِّذ هذا التابع دالة النظام fsync(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.fsyncSync(fd)
أضيف في الإصدار: 0.1.96.
fd
: <integer>
ينفِّذ هذا التابع دالة النظام fsync(2)
بشكل متزامن. يعيد هذا التابع القيمة undefined
.
fs.ftruncate(fd[, len], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.8.6 | أضيف هذا التابع. |
fd
: <integer>len
: <integer> القيمة الافتراضية هي:0
.callback
: <Function>err
: <Error>
يقطع هذا التابع الملف ذا الواصف fd
إلى الحجم len
عبر استدعاء دالة النظام ftruncate(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
إن كان حجم الملف أكبر من الحجم len
المعطى بالبايت، فستُعاد البايتات len
الأولى فقط من الملف. على سبيل المثال، يعيد البرنامج التالي البايتات الأربعة الأولى فقط من الملف:
console.log(fs.readFileSync('temp.txt', 'utf8'));
// Node.js :سيُطبَع
// جلب واصف الملف للملف المراد اقتطاعه
const fd = fs.openSync('temp.txt', 'r+');
// اقتطاع أول أربعة بايتات من الملف
fs.ftruncate(fd, 4, (err) => {
assert.ifError(err);
console.log(fs.readFileSync('temp.txt', 'utf8'));
});
// Node :سيُطبَع
إن كان حجم الملف أقل من الحجم <code>len</code> المراد اقتطاعه، فسيُمدَّد حجم الملف إلى الحجم <code>len</code> بالبايت وستُملَأ البايتات المضافة ببايتات عدمية (أي بالقيمة <code>'\0'</code>):
<syntaxhighlight lang="javascript">console.log(fs.readFileSync('temp.txt', 'utf8'));
// Node.js :سيُطبَع
// جلب واصف الملف للملف المراد اقتطاعه
const fd = fs.openSync('temp.txt', 'r+');
// محاولة اقتطاع الملف إلى الحجم 10 بايت في حين أن حجمه الحقيقي هو 7 بايت
fs.ftruncate(fd, 10, (err) => {
assert.ifError(err);
console.log(fs.readFileSync('temp.txt'));
});
// <Buffer 4e 6f 64 65 2e 6a 73 00 00 00> :سيُطبَع
// (UTF8 في الترميز 'Node.js\0\0\0' أي تكون)
البايتات الأخيرة المضافة هي بايتات عدمية ('\0'
) لتعويض البايتات الإضافية الناتجة عن عملية الإفراط في الاقتطاع (over-truncation).
fs.ftruncateSync(fd[, len])
أضيف في الإصدار: v0.8.6.
يقطع هذا التابع الملف ذا الواصف fd
إلى الحجم len
عبر استدعاء دالة النظام ftruncate(2)
بشكل متزامن. لمزيد من التفاصيل، اطلع رجاءً على توثيق الإصدار غير المتزامن من هذا التابع الذي هو fs.ftruncate()
.
fs.futimes(fd, atime, mtime, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v4.1.0 | يُسمَح الآن بأن تُستعمَل السلاسل النصية العددية، والقيمة NaN ، والقيمة Infinity لتكون محدِّدات للوقت (time specifiers).
|
v0.4.2 | أضيف هذا التابع. |
fd
: <integer>atime
: <number> | <string> | <Date>mtime
: <number> | <string> | <Date>callback
: <Function>err
: <Error>
يغيِّر هذا التابع بصمات وقت نظام الملفات للكائن المشار إليه بواصف الملف المعطى. اطلع على التابع fs.utimes()
.
لا يعمل هذا التابع على إصدارات AIX التي قبل 7.1، إذ ستعيد إن استعملت في تلك الإصدارات الخطأ UV_ENOSYS
.
fs.futimesSync(fd, atime, mtime)
الإصدار | التغييرات |
---|---|
v4.1.0 | يُسمَح الآن بأن تُستعمَل السلاسل النصية العددية، والقيمة NaN ، والقيمة Infinity لتكون محدِّدات للوقت (time specifiers).
|
v0.4.2 | أضيف هذا التابع. |
يمثِّل هذا التابع الإصدار المتزامن من التابع fs.futimes()
. يعيد هذا التابع القيمة undefined
.
fs.lchmod(path, mode, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.4.7 | أضيف هذا التابع. |
يغيِّر هذا التابع أذونات ملفٍ عبر استدعاء lchmod(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. هذا التابع متاحٌ في أنظمة macOS فقط.
fs.lchmodSync(path, mode)
أهملت بدءًا من الإصدار: v0.4.7.
يغيِّر هذا التابع أذونات ملفٍ عبر استدعاء lchmod(2)
بشكل متزامن. يعيد هذا التابع القيمة undefined
.
fs.lchown(path, uid, gid, callback)
الإصدار | التغييرات |
---|---|
v10.6.0 | لم تعد هذه الواجهة البرمجية مهملةً بعد الآن. |
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
path
: <string> | <Buffer> | <URL>uid
: <integer>gid
: <integer>callback
: <Function>err
: <Error>
يغيِّر هذا التابع المالك والمجموعة المالكة لملف عبر استدعاء lchown(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.chownSync(path, uid, gid)
الإصدار | التغييرات |
---|---|
v10.6.0 | لم تعد هذه الواجهة البرمجية مهملةً بعد الآن. |
يغيِّر هذا التابع المالك والمجموعة المالكة لملف عبر استدعاء lchown(2)
بشكل متزامن. يعيد هذا التابع القيمة undefined
.
fs.link(existingPath, newPath, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط existingPath والوسيط newPath كائنات من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.31 | أضيف هذا التابع. |
existingPath
: <string> | <Buffer> | <URL>newPath
: <string> | <Buffer> | <URL>callback
: <Function>err
: <Error>
ينشئ هذا التابع وصلةً جديدةً (وصلةً صلبةً) للملف الحالي عبر استدعاء link(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
fs.linkSync(existingPath, newPath)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط existingPath والوسيط newPath كائنات من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.31 | أضيف هذا التابع. |
ينشئ هذا التابع وصلةً جديدةً (وصلةً صلبةً) للملف الحالي عبر استدعاء link(2)
بشكل متزامن. يعيد هذا التابع القيمة undefined
.
fs.lstat(path[, options], callback)
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.30 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
callback
: <Function>err
: <Error>
stats
: <fs.Stats>
يجلب هذا التابع معلومات حول الملف ذي المسار path
عبر استدعاء دالة النظام lstat(2)
بشكل غير متزامن. يمرَّر إلى دالة رد النداء وسيطين هما: err
، و stats
، إذ stats
هو الكائن fs.Stats
. التابع lstat()
ممائلٌ تمامًا للتابع stat()
باستثناء أنَّه إذا كان المسار path
وصلةً رمزيةً، فستُعاد حينئذٍ معلومات عن الوصلة نفسها وليس عن الملف الذي تشير إليه هذه الوصلة.
fs.lstatSync(path[, options])
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.30 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
- القيم المعادة: <fs.Stats>
يجلب هذا التابع معلومات حول الملف ذي المسار path
عبر استدعاء دالة النظام lstat(2)
بشكل متزامن.
fs.mkdir(path[, mode], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.8 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>mode
: <integer> غير مدعوم على ويندوز. القيمة الافتراضية هي:0o777
.callback
: <Function>err
: <Error>
ينشئ هذا التابع مجلدًا جديدًا بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. انظر أيضًا الدالة mkdir(2)
.
fs.mkdirSync(path[, mode])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>mode
: <integer> غير مدعوم على ويندوز. القيمة الافتراضية هي:0o777
.
ينشئ هذا التابع مجلدًا جديدًا بشكل متزامن. يعيد هذا التابع القيمة undefined
. هذا التابع هو الإصدار المتزامن من التابع fs.mkdir()
.
انظر أيضًا الدالة mkdir(2)
.
fs.mkdtemp(prefix[, options], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v6.2.1 | أصبح المعامل callback الآن اختياريًّا.
|
v5.10.0 | أضيف هذا التابع. |
prefix
: <string>options
: <string> | <Object>encoding
: <string> القيمة الافتراضية هي:'utf8'
.
callback
: <Function>
ينشئ هذا التابع مجلدًا فريدًا مؤقتًا بشكل غير متزامن.
يولِّد هذا التابع ستة محارف عشوائية لتضاف في نهاية البادئة prefix
المطلوبة لإنشاء مجلدٍ فريدٍ مؤقتٍ.
يمرَّر مسار المجلد المُنشَأ كسلسلة نصية إلى المعامل الثاني لدالة رد النداء.
يمكن أن يكون الوسيط options
سلسلةً نصيةً تحدِّد الترميز، أو كائنًا مع الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله.
fs.mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, folder) => {
if (err) throw err;
console.log(folder);
// /tmp/foo-itXde2 أو C:\Users\...\AppData\Local\Temp\foo-itXde2 :سيُطبَع
});
سيضيف التابع fs.mkdtemp()
المحارف الستة العشوائية المختارة مباشرةً إلى السلسلة prefix
النصية. على سبيل المثال، إن كان لدينا المجلد /tmp
وأردنا إنشاء مجلد مؤقت داخله، فيجب أن تنتهي البادئة prefix
بالفاصلة الزائدة المستعملة عادةً في فصل المسار في المنصة المستعملة آنذاك (require('path').sep
).
// المجلد الأب للمجلد المؤقت الجديد
const tmpDir = os.tmpdir();
// :*استعمال التابع بهذه الطريقة *غير صحيح
fs.mkdtemp(tmpDir, (err, folder) => {
if (err) throw err;
console.log(folder);
// `/tmpabc123` سيطبع شيء شبيه بالقيمة
// ينشأ المجلد المؤقت الجديد في نظام الملفات الجذر
// /tmp بدلًا من إنشائه *ضمن* المجلد
});
// :*استعمال التابع بهذه الطريقة هو *الصحيح
const { sep } = require('path');
fs.mkdtemp(`${tmpDir}${sep}`, (err, folder) => {
if (err) throw err;
console.log(folder);
// `/tmp/abc123` سيطبع شيء شبيه بالقيمة
// أنشئ المجلد المؤقت الجديد ضمن
// كما هو مطلوب /tmp المجلد
});
fs.mkdtempSync(prefix[, options])
أضيف في الإصدار: v5.10.0.
prefix
: <string>options
: <string> | <Object>encoding
: <string> القيمة الافتراضية هي:'utf8'
.
- القيم المعادة: <string>
ينشئ هذا التابع مجلدًا مؤقتًا فريدًا بشكل متزامن.
لمزيد من المعلومات، اطلع على توثيق الإصدار الغير متزامن من هذا التابع الذي هو fs.mkdtemp()
.
يمكن أن يكون الوسيط options
سلسلةً نصيةً تحدِّد الترميز، أو كائنًا مع الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله.
fs.open(path, flags[, mode], callback)
الإصدار | التغييرات |
---|---|
v9.9.0 | أصبح الوضعان <code>as</code> و <code>as+</code> مدعومين الآن. |
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.0.2 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>flags
: <string> | <number> اطلع على القسم «دعم رايات نظام الملفات».mode
: <integer> القيمة الافتراضية هي:0o666
(قابلية القراءة والكتابة).callback
: <Function>
يفتح هذا التابع ملفًا بشكل غير متزامن. اطلع على دليل الدالة open(2)
.
يضبط الوسيط mode
نمط الملف (الأذونات والبتات اللاصقة [sticky bits]) في حال لم يكن الملف موجودًا وأنشئ آنذاك. في ويندوز، يمكن التلاعب بإذن الكتابة فقط. اطلع على توثيق التابع fs.chmod()
. تأخذ دالة رد النداء وسيطين هما: err
و fd
. تعدُّ بعض المحارف (مثل < > : " / \ | ? *
) محجوزةً في ويندوز كما أشير إلى ذلك التوثيق «تسمية الملفات، والمسارات، ومجالات الأسماء». في نظام الملفات NTFS، إن احتوى اسم الملف نقطتين رأسيتين، فستفتح Node.js مجرًى في نظام الملفات كما موضح في هذه الصفحة.
التوابع التي تعتمد على التابع fs.open()
تسلك السلوك نفسه أيضًا مثل التابع fs.writeFile()
و التابع fs.readFile()
...إلخ.
fs.openSync(path, flags[, mode])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>flags
: <string> | <number> اطلع على القسم «دعم رايات نظام الملفات».mode
: <integer> القيمة الافتراضية هي:0o666
(قابلية القراءة والكتابة).- القيم المعادة: <number>
يفتح هذا التابع ملفًا بشكل متزامن. اطلع على دليل الدالة open(2)
.
لمزيدٍ من التفاصيل، اطلع على الإصدار غير المتزامن لهذا التابع الذي هو fs.open()
.
fs.read(fd, buffer, offset, length, position, callback)
الإصدار | التغييرات |
---|---|
v10.10.0 | يمكن الآن أن يكون المعامل buffer كائنًا من النوع TypedArray أو DataView .
|
v7.4.0 | يمكن الآن أن يكون المعامل buffer كائنًا من النوع Uint8Array .
|
v6.0.0 | يمكن أن يأخذ المعامل length الآن القيمة 0. |
v0.0.2 | أضيف هذا التابع. |
fd
: <string>buffer
: <Buffer> | <TypedArray> | <DataView> يمثِّل ذاكرة التخزين المؤقتة التي ستُكتَب فيها البيانات المقروءة من الملف.offset
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في ذاكرة التخزين المؤقتةbuffer
(أي مقدار الإزاحة من بدياتها).length
: <integer> عددٌ صحيحٌ يحدِّد عدد البايتات المراد قراءتها من الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية قراءة البيانات من الملف. إن كانت قيمة هذا الوسيطnull
، فستُقرَأ البيانات بدءًا من موضع المؤشر الحالي في الملف ثم سيُحدَّث موضع مؤشِّر الملف بعد انتهاء عملية القراءة. إن كانت قيمة هذا الوسيط عددًا صحيحًا، فسيبقى موضع مؤشِّر الملف دون تغيير.callback
: <Function>
يقرأ هذا التابع البيانات من الملف المحدَّد في واصف الملف fd
المعطى.
تأخذ دالة رد النداء ثلاثة وسائط هي: err
و bytesRead
و buffer
.
إن استدعي هذا التابع مثل نظيره util.promisify()
، فسيُعيد كائنًا من النوع Promise
لكائن Object
مع الخاصيتين bytesRead
و buffer
.
fs.readdir(path[, options], callback)
الإصدار | التغييرات |
---|---|
v10.10.0 | أضيف الخيار withFileTypes .
|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v6.0.0 | أضيف المعامل options .
|
v0.1.8 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <string> | <Object>callback
: <Function>err
: <Error>files
: <string[]> | <Buffer[]> | <fs.Dirent[]>
يقرأ هذا التابع محتوى المجلد المحدَّد في المسار عبر تنفيذ الدالة readdir(3)
بشكل غير متزامن. يمُرَّر إلى دالة رد النداء وسيطين هما: err
و files
، إذ files
هو مصفوفةٌ من أسماء الملفات في المجلد باستثناء المجلد '.'
والمجلد '..'
.
يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله لأسماء الملفات الممرَّرة إلى دالة رد النداء. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فستُمرَّر أسماء الملفات المعادة ككائنات من النوع Buffer
.
إن ضُبِط الخيار options.withFileTypes
إلى القيمة true
، فستحوي المصفوفة files
الكائنات fs.Diret
.
fs.readdirSync(path[, options])
الإصدار | التغييرات |
---|---|
v10.10.0 | أضيف الخيار withFileTypes .
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <string> | <Object>- القيم المعادة: <string[]> | <Buffer[]> | <fs.Dirent[]>
يقرأ هذا التابع محتوى المجلد المحدَّد في المسار عبر تنفيذ الدالة readdir(3)
بشكل متزامن.
يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله لأسماء الملفات الممرَّرة إلى دالة رد النداء. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فستُمرَّر أسماء الملفات المعادة ككائنات من النوع Buffer
.
إن ضُبِط الخيار options.withFileTypes
إلى القيمة true
، فسيحوي الناتج الكائنات fs.Diret
.
fs.readFile(path[, options], callback)
الإصدار | التغييرات |
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v5.1.0 | سيستدعى رد النداء callback مع القيمة null بوصفها قيمة للمعامل error في حال نجاح العملية.
|
v5.0.0 | يمكن أن يكون المعامل path واصف ملفٍ الآن.
|
v0.1.29 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL> | <integer> اسمُ أو واصفُ ملفٍ.options
: <string> | <Object>encoding
: <string> | <null> القيمة الافتراضية هي:null
.flag
: <string> اطلع على قسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'r'
.
callback
: <Function>
يقرأ هذا التابع كامل محتوى الملف ذي المسار path
بشكل غير متزامن.
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
يمُرَّر إلى دالة رد النداء وسيطين هما: err
أو data
، إذ data
هو المحتوى المقروء من الملف. إن لم يُحدَّد أي ترميز، فسيكون نوع الوسيط data
هو كائنٌ من النوع Buffer
.
إن كان الوسيط options
سلسلة نصية، فسيُحدِّد حينئذٍ الترميز:
fs.readFile('/etc/passwd', 'utf8', callback);
عندما يكون المسار path
مجلدًا، سيختلف سلوك التابع fs.readFile()
والتابع fs.readFileSync()
اعتمادًا على المنصة المستعملة؛ في أنظمة التشغيل macOS، ولينكس، وويندوز، سيؤدي ذلك إلى رمي خطأ. أمَّا في FreeBSD، فسيعاد تمثيلٌ بمحتوى المجلد.
// macOS, Linux, and Windows
fs.readFile('<directory>', (err, data) => {
// => [Error: EISDIR: illegal operation on a directory, read <directory>]
});
// FreeBSD
fs.readFile('<directory>', (err, data) => {
// => null, [[JavaScript/Date|<Date>]]
});
يجب على واصف الملف المحدَّد أن يدعم عملية القراءة.
إن حُدِّد واصف ملفٍ كمسار path
، فلن يُغلَق الملف تلقائيًّا بعد انتهاء العملية.
يُخزِّن التابع fs.readFile()
كامل محتوى الملف في الذاكرة مؤقتًا. لتقليل الحجم المستهلك من الذاكرة، يفضل استعمال المجرى عبر fs.createReadStream()
إن كان ذلك ممكنًا.
fs.readFileSync(path[, options])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v5.0.0 | يمكن أن يكون المعامل path واصف ملفٍ الآن. |
v0.1.29 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL> | <integer> اسمُ أو واصفُ ملفٍ.options
: <string> | <Object>encoding
: <string> | <null> القيمة الافتراضية هي:null
.flag
: <string> اطلع على قسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'r'
.
- القيم المعادة: <string> | <Buffer>
يقرأ هذا التابع كامل محتوى الملف ذي المسار path
بشكل متزامن ثمَّ يعيده.
لمزيدٍ من التفاصيل، اطلع على الإصدار غير المتزامن من هذا التابع الذي هو fs.readFile()
.
إن لم يُحدَّد أي ترميز، فسيُعاد كائنٌ من النوع Buffer
. أمَّا إن حُدِّد الخيار encoding
، فستُعاد سلسلةٌ نصيةٌ حينئذٍ.
بشكل مشابه للتابع fs.readFile()
، عندما يكون المسار path
مجلدًا، فسيختلف سلوك التابع fs.readFile()
والتابع fs.readFileSync()
اعتمادًا على المنصة المستعملة؛ في أنظمة التشغيل macOS، ولينكس، وويندوز، سيؤدي ذلك إلى رمي خطأ. أما في FreeBSD، فسيعاد تمثيلٌ بمحتوى المجلد.
// macOS, Linux, and Windows
fs.readFileSync('<directory>');
// => [Error: EISDIR: illegal operation on a directory, read <directory>]
// FreeBSD
fs.readFileSync('<directory>'); // => [[JavaScript/Date|<Date>]]
fs.readlink(path[, options], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.1.31 | أضيف هذا التابع. |
يقرأ هذا التابع محتوى الوصلة الرمزية ذات المسار path
عبر استدعاء الدالة readlink(2)
بشكل غير متزامن.
يمرَّر دالة رد النداء وسيطين هما: err
، و linkString
.
يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع مسار الوصلة الممرَّر إلى دالة رد النداء. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر مسار الوصلة المعاد ككائن من النوع Buffer
.
fs.readlinkSync(path[, options])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.31 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <string> | <Object>- القيم المعادة: <string> | <Buffer>
يقرأ هذا التابع محتوى الوصلة الرمزية ذات المسار path
عبر استدعاء الدالة readlink(2)
بشكل متزامن. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع مسار الوصلة المعاد. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر مسار الوصلة المعاد ككائن من النوع Buffer
.
fs.readSync(fd, buffer, offset, length, position)
الإصدار | التغييرات |
---|---|
v10.10.0 | يمكن الآن أن يكون المعامل buffer كائنًا من النوع TypedArray أو DataView .
|
v6.0.0 | يمكن أن يأخذ المعامل length الآن القيمة 0.
|
v0.1.21 | أضيف هذا التابع. |
fd
: <string>buffer
: <Buffer> | <TypedArray> | <DataView> يمثِّل ذاكرة التخزين المؤقتة التي ستُكتَب فيها البيانات المقروءة من الملف.offset
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في ذاكرة التخزين المؤقتةbuffer
(أي مقدار الإزاحة من بدياتها).length
: <integer> عددٌ صحيحٌ يحدِّد عدد البايتات المراد قراءتها من الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية قراءة البيانات من الملف. إن كانت قيمة هذا الوسيطnull
، فستُقرَأ البيانات بدءًا من موضع المؤشر الحالي في الملف ثم سيُحدَّث موضع مؤشِّر الملف بعد انتهاء عملية القراءة. إن كانت قيمة هذا الوسيط عددًا صحيحًا، فسيبقى موضع مؤشِّر الملف دون تغيير.- القيم المعادة: <number>
يقرأ هذا التابع البيانات من الملف المحدَّد في واصف الملف fd
المعطى ويضعها في المخزن buffer
ثم يعيد عدد البايتات المقروءة.
لمزيد من التفاصيل، اطلع على توثيق الإصدار غير المتزامن من هذا التابع الذي هو fs.read()
.
fs.realpath(path[, options], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v8.0.0 | أضيف دعمٌ لاستبيان أنبوب أو مقبس. |
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v6.4.0 | أصبح استدعاء هذا التابع يعمل مجدَّدًا لمختلف الحالات الحدية في ويندوز. |
v6.0.0 | حُذِف المعامل cache .
|
v0.1.31 | أضيف هذا التابع. |
يحسب هذا التابع اسم المسار الأساسي (canonical pathname) بشكل غير متزامن عبر استبيان .
، و ..
، والوصلات الرمزية. ليس بالضرورة أن يكون اسم المسار المتعارف عليه فريدًا. يمكن للوصلات الصلبة ونظام الملفات الموصول (عبر الأمر mount) أن يكشفا عن نظام ملفات عبر أسماء مسارات متعددة. يسلك هذا التابع نفس سلوك الدالة realpath(3)
باستثناء بعض الأمور منها:
- لا تجرى أية عملية تحويل لحالة الأحرف على أنظمة الملفات الغير حساسة لحالة الأحرف.
- يعتمد العدد الأقصى للوصلات الرمزية على المنصة المستعملة، ويكون غالبًا أكبر بكثير من العدد الذي يدعمه تنفيذ
realpath(3)
.
يمرَّر إلى دالة رد النداء وسيطين هما: err
، و resolvedPath
. قد يُستخدَم process.cwd
لاستبيان المسارات النسبية. المسارات المدعومة هي المسارات التي يمكن تحويلها إلى سلاسل نصية مرمزة بالترميز UTF8 فقط. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع المسار الممرَّر إلى دالة رد النداء. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر المسار المعاد ككائن من النوع Buffer
. إن استبين المسار إلى مقبسٍ أو أنبوبٍ، فسيعيد هذا التابع اسمًا يعتمد على النظام لذلك الكائن.
fs.realpath.native(path[, options], callback)
أضيف في الإصدار: v9.2.0.
يعيد هذا التابع المسار الأساسي المطلق للمسار path
عبر تنفيذ realpath(3)
بشكل غير متزامن. يمرَّر إلى دالة رد النداء وسيطين هما: err
، و resolvedPath
. المسارات المدعومة هي المسارات التي يمكن تحويلها إلى سلاسل نصية مرمزة بالترميز UTF8 فقط. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع المسار الممرَّر إلى دالة رد النداء. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر المسار المعاد ككائن من النوع Buffer
. في لينكس، عندما تُربَط Node.js مع المكتبة musl libc، يجب أن يوصل (mount) نظام الملفات procfs في /proc
لكي يعمل هذا التابع بشكل صحيح. أما المكتبة glibc، فلا تشترط ذلك.
fs.realpathSync(path[, options])
الإصدار | التغييرات |
---|---|
v8.0.0 | أضيف دعمٌ لاستبيان أنبوب أو مقبس. |
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v6.4.0 | أصبح استدعاء هذا التابع يعمل مجدَّدًا لمختلف الحالات الحدية في ويندوز. |
v6.0.0 | حُذِف المعامل cache .
|
v0.1.31 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <string> | <Object>- القيم المعادة: <string> | <Buffer>
يعيد هذا التابع اسم المسار المستبين. لمزيدٍ من التفاصيل، اطلع على توثيق الإصدار غير المتزامن من هذا التابع الذي هو fs.realpath()
.
fs.realpathSync.native(path[, options])
أضيف في الإصدار: v9.2.0.
path
: <string> | <Buffer> | <URL>options
: <string> | <Object>- القيم المعادة: <string> | <Buffer>
يعيد هذا التابع المسار الأساسي المطلق للمسار path
عبر تنفيذ realpath(3)
بشكل متزامن. المسارات المدعومة هي المسارات التي يمكن تحويلها إلى سلاسل نصية مرمزةً بالترميز UTF8 فقط. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع المسار المعاد. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر المسار المعاد ككائن من النوع Buffer
. في لينكس، عندما تُربَط Node.js مع المكتبة musl libc، يجب أن يوصل (mount) نظام الملفات procfs في /proc
لكي يعمل هذا التابع بشكل صحيح. أمَّا المكتبة glibc، فلا تشترط ذلك.
fs.rename(oldPath, newPath, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط oldPath والوسيط newPath كائنات من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.0.2 | أضيف هذا التابع. |
oldPath
: <string> | <Buffer> | <URL>newPath
: <string> | <Buffer> | <URL>callback
: <Function>err
: <Error>
يغيِّر هذا التابع اسم الملف oldPath
إلى newPath
المعطى بشكل غير متزامن. إن كان الملف newPath
موجودًا من قبل، فسيُستبدَل آنذاك. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. انظر أيضًا دالة النظام rename(2)
.
fs.rename('oldFile.txt', 'newFile.txt', (err) => {
if (err) throw err;
console.log('Rename complete!');
});
fs.renameSync(oldPath, newPath)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط oldPath والوسيط newPath كائنات من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
يغيِّر هذا التابع اسم الملف oldPath
إلى newPath
المعطى بشكل متزامن. إن كان الملف newPath
موجودًا من قبل، فسيُستبدَل آنذاك. انظر أيضًا دالة النظام rename(2)
.
fs.rmdir(path, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.0.2 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>callback
: <Function>err
: <Error>
يحذف هذا التابع المجلد ذا المسار path
عبر استدعاء rmdir(2)
بشكل غير متزامن. يؤدي استعمال التابع fs.rmdir()
مع ملف (وليس مجلد) إلى حصول الخطأ ENOENT
في ويندوز والخطأ ENOTDIR
في أنظمة POSIX.
fs.rmdirSync(path)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
يحذف هذا التابع المجلد ذا المسار path
عبر استدعاء rmdir(2)
بشكل متزامن. يؤدي استعمال التابع fs.rmdirSync()
مع ملف (وليس مجلد) إلى حصول الخطأ ENOENT
في ويندوز والخطأ ENOTDIR
في أنظمة POSIX.
fs.stat(path[, options], callback)
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.0.2 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
callback
: <Function>err
: <Error>
stats
: <fs.Stats>
يجلب هذا التابع معلومات حول الملف ذي المسار path
عبر استدعاء دالة النظام stat(2)
بشكل غير متزامن. يمرَّر إلى دالة رد النداء وسيطين هما: err
، و stats
، إذ stats
هو الكائن fs.Stats
. إن حصل خطأ، سيكون err.code
أحد أخطاء النظام الشائعة. لا ينصح باستعمال التابع fs.stat()
للتحقق من وجود الملف قبل استدعاء fs.open()
، أو fs.readFile()
، أو fs.writeFile()
. بدلًا من ذلك، يجب على شيفرة المستخدم فتح الملف والقراءة منه أو الكتابة عليه مباشرةً ومعالجة الخطأ المرمي إن لم يكن الملف موجودًا. للتحقق من وجود ملفٍ دون التعديل عليه بعد ذلك، ينصح باستعمال التابع fs.access()
.
fs.statSync(path[, options])
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
- القيم المعادة: <fs.Stats>
يجلب هذا التابع معلومات حول الملف ذي المسار path
عبر استدعاء دالة النظام stat(2)
بشكل متزامن.
fs.symlink(target, path[, type], callback)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط target والوسيط path كائنات من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.31 | أضيف هذا التابع. |
target
: <string> | <Buffer> | <URL>path
: <string> | <Buffer> | <URL>type
: <string> القيمة الافتراضية هي:'file'
.callback
: <Function>err
: <Error>
ينشئ هذا التابع وصلة رمزيَّةً لملف المحدد بالمسار target
عبر استدعاء symlink(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. يمكن ضبط الوسيط type
إلى القيمة 'dir'
، أو 'file'
، أو 'junction'
وهو متاح في ويندوز فقط (يُتجاهل في المنصات الأخرى). تتطلب نقاط الوصل (junction points) في ويندوز أن يكون المسار الهدف مطلقًا. عند استعمال 'junction'
، فسيحول الوسيط target
تلقائيًّا إلى مسار مطلق. إليك هذا المثال الذي سيُنشأ وصلة رمزية تدعى "new-port" تشير إلى الملف "foo":
fs.symlink('./foo', './new-port', callback);
fs.symlinkSync(target, path[, type])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط target والوسيط path كائنات من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.31 | أضيف هذا التابع. |
target
: <string> | <Buffer> | <URL>path
: <string> | <Buffer> | <URL>type
: <string> القيمة الافتراضية هي:'file'
.callback
: <Function>err
: <Error>
ينشئ هذا التابع وصلة رمزيَّةً لملف المحدد بالمسار target
عبر استدعاء symlink(2)
بشكل متزامن. لمزيد من التفاصيل، ارجع إلى الإصدار الغير متزامن من هذا التابع الذي هو fs.symlink()
.
fs.truncate(path[, len], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.8.6 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>len
: <integer> القيمة الافتراضية هي:0
.callback
: <Function>err
: <Error>
يقطع هذا التابع الملف ذا المسار path
إلى الحجم len
عبر استدعاء دالة النظام truncate(2)
بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه. كان بالإمكان أن يُمرَّر واصف ملف كوسيط أول أيضًا، وسيستدعى في هذه الحالة التابع fs.ftruncate()
، إلا أنه ذلك قد أُهمِل وقد يؤدي إلى رمي خطأ في المستقبل.
fs.truncateSync(path[, len])
أضيف في الإصدار: v0.8.6.
يقطع هذا التابع الملف ذا المسار path
إلى الحجم len
عبر استدعاء دالة النظام truncate(2)
بشكل متزامن. كان بالإمكان أن يُمرَّر واصف ملف كوسيط أول أيضًا، وسيستدعى في هذه الحالة التابع fs.ftruncate()
، إلا أنه ذلك قد أُهمِل وقد يؤدي إلى رمي خطأ في المستقبل.
fs.unlink(path, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.0.2 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>callback
: <Function>err
: <Error>
يزيل هذا التابع ملفًا أو وصلةً رمزيةً بشكل غير متزامن. لن تُعَط دالة رد النداء المُكمِّلة أية وسائط غير الاستثناء المحتمل وقوعه.
// هو ملف طبيعي 'path/file.txt' بفرض أن الملف
fs.unlink('path/file.txt', (err) => {
if (err) throw err;
console.log('path/file.txt was deleted');
});
لن يعمل التابع fs.unlink()
إن كان المسار فارغًا أو يشير إلى مجلد أو غير ذلك من الحالات. إن أردت حذف مجلد، فاستعمل التابع fs.rmdir()
. انظر أيضًا دالة النظام unlink(2)
.
fs.unlinkSync(path)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.21 | أضيف هذا التابع. |
يزيل هذا التابع ملفًا أو وصلةً رمزيةً بشكل غير متزامن. يعيد هذا التابع القيمة undefined
. انظر أيضًا دالة النظام unlink(2)
.
fs.unwatchFile(filename[, listener])
أضيف في الإصدار: v0.1.31.
filename
: <string> | <Buffer> | <URL>path
: <Function> وسيط اختياري يمثل المستمع السابق الذي ربط باستعمالfs.watchFile()
.
يوقف هذا التابع عملية مراقبة التغييرات التي تحصل في الملف filename
. إن أعطي الوسيط listener
، فسيحذف التابع هذا المستمع المحدد فقط. خلا ذلك، سيزيل جميع المستمعين موقفًا عملية مراقبة الملف filename
بشكل فعَّال. يمثِّل استدعاء التابع fs.unwatchFile()
مع اسم ملف لا يراقب آنذاك عمليةً فارغةً ولا يعد ذلك خطأً. يعدُّ استعمال التابع fs.watch()
أكثر فاعليةً من استعمال fs.watchFile()
، و fs.unwatchFile()
. يجب أن يُستعمَل التابع fs.watch()
بدلًا من التابع fs.watchFile()
، و fs.unwatchFile()
ما أمكن ذلك.
fs.utimes(path, atime, mtime, callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v8.0.0 | لا يُسمَح بعد الآن بأن تُستعمَل القيمة NaN ، والقيمة Infinity ، والقيمة Infinity- لتكون محدِّدات للوقت (time specifiers).
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v4.1.0 | يُسمَح الآن بأن تُستعمَل السلاسل النصية العددية، والقيمة NaN ، والقيمة Infinity لتكون محدِّدات للوقت (time specifiers).
|
v0.4.2 | أضيف هذا التابع. |
filename
: <string> | <Buffer> | <URL>atime
: <number> | <string> | <Date>mtime
: <number> | <string> | <Date>callback
: <Function>err
: <Error>
يغيِّر هذا التابع بصمات وقت نظام الملفات للكائن المشار إليه بالمسار المعطى بشكل غير متزامن. يخضع الوسيطان atime
و mtime
إلى القاعدتين التاليتين:
- يمكن أن تكون القيم إما أعدادًا تمثل الوقت في توقيت يونكس (Unix epoch time)، أو التواريخ، أو سلاسل نصية عددية مثل
'123456789.0'
. - إن لم يكن بالإمكان تحويل القيمة إلى عددٍ، أو كانت
NaN
أوInfinity
أو-Infinity
، فسيُرمَى خطأٌ.
fs.utimesSync(path, atime, mtime)
الإصدار | التغييرات |
---|---|
v8.0.0 | لا يُسمَح بعد الآن بأن تُستعمَل القيمة NaN ، والقيمة Infinity ، والقيمة Infinity- لتكون محدِّدات للوقت (time specifiers).
|
v7.6.0 | يمكن الآن أن يكون الوسيط path كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v4.1.0 | يُسمَح الآن بأن تُستعمَل السلاسل النصية العددية، والقيمة NaN ، والقيمة Infinity لتكون محدِّدات للوقت (time specifiers).
|
v0.4.2 | أضيف هذا التابع. |
filename
: <string> | <Buffer> | <URL>atime
: <number> | <string> | <Date>mtime
: <number> | <string> | <Date>
يغيِّر هذا التابع بصمات وقت نظام الملفات للكائن المشار إليه بالمسار المعطى بشكل متزامن. لمزيدٍ من التفاصيل، اطلع على توثيق الإصدار غير المتزامن من هذا التابع الذي هو fs.utimes()
.
fs.watch(filename[, options][, listener])
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط filename كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v7.0.0 | لن يُعدَّل الكائن options المُمرَّر مطلقًا.
|
v0.5.10 | أضيف هذا التابع. |
filename
: <string> | <Buffer> | <URL>options
: <string> | <Object>persistent
: <boolean> يحدِّد إن كان يجب أن تستمر العملية بالعمل ما دامت عملية مراقبة الملف مستمرة. القيمة الافتراضية هي:true
.recursive
: <boolean> يحدِّد إن كان يجب مراقبة جميع المجلدات الفرعية أيضًا أم يجب مراقبة المجلد المحدد فقط. يُستعمَل هذا الخيار عندما يراد مراقبة مجلد، ولا يعمل إلا على المنصات المدعومة (اطلع على «تحذيرات يجب أخذها بالحسبان» في الأسفل). القيمة الافتراضية هي:false
.encoding
: <string> يحدد ترميز المحارف المراد استعماله من أجل اسم الملف الممرر إلى المستمع. القيمة الافتراضية هي:'utf8'
.
listener
: <Function> | <undefined> القيمة الافتراضية هي:undefined
.- القيم المعادة: <fs.FSWatcher>
ينشئ هذا التابع عملية مراقبة على filename
لمراقبة جميع التغييرات الحاصلة، إذ إما أن يكون filename
ملفًا أو مجلدًا. الوسيط options
الممرر إلى هذا التابع اختياري. إن أعطي وكان سلسلة نصية، فسيُحدِّد حينئذٍ الترميز encoding
المراد استعماله. خلا ذلك، يجب تمرير الوسيط options
ككائن. يمرَّر إلى دالة رد النداء التي تمثل المستمع (listener) وسيطان هما: eventType
و filename
؛ يأخذ الوسيط eventType
إما القيمة 'rename'
أو القيمة 'change'
، بينما يمثل الوسيط filename
اسم الملف الذي أطلَق الحدث. في أغلب منصات التشغيل، يُطلَق الحدث 'rename'
متى ما ظهر اسم الملف أو اختفى في المجلد. يُربَط رد النداء المستمع مع الحدث 'change'
الذي يُطلَق عبر fs.FSWatcher
، ولكن هذا الحدث لا يشبه القيمة 'change'
الممررة إلى الوسيط eventType
.
تحذيرات يجب أخذها بالحسبان
الواجهة البرمجية fs.watch
ليست ثابتة 100% عبر جميع المنصات، إذ تكون غير متوافرة في بعض الحالات. الخيار recursive
مدعومٌ فقط في macOS وويندوز.
التوافر
تعتمد هذه الميزة على نظام التشغيل بشكل أساسي الذي يوفر طريقةً للتنبيه بالتغيُّرات التي تحصل في نظام الملفات.
- في أنظمة لينكس، يُستعمَل
inotify(7)
. - في أنظمة BSD، يُستعمَل
kqueue(2)
. - في أنظمة macOS، يُستعمَل
kqueue(2)
للملفات وFSEvents
للمجلدات. - في أنظمة SunOS (بما فيها Solaris و SmartOS)، يُستعمَل منافذ الحدث (event ports).
- في أنظمة ويندوز، تعتمد هذه الميزة على
ReadDirectoryChangesW
. - في أنظمة Aix، تعتمد هذه الميزة على
AHAFS
التي يجب تفعليها.
الوظيفة الأساسية غير متوافرة لعدة أسباب، لذا لن يستطيع fs.watch
أن يؤدي وظيفته. على سبيل المثال، يمكن أن تكون عملية مراقبة ملفات أو مجلدات غير جديرة بالثقة، أو مستحيلة في بعض الحالات، في أنظمة ملفات الشكبة (مثل NFS، أو SMB، وغيرها) أو أنظمة ملفات المضيف عند استعمال تطبيقات افتراضية مثل Vagrant، أو Docker وغيرهما. لا يزال بالإمكان استعمال fs.watchFile()
الذي يستعمل «استطلاع الحالة» (stat polling) إلا أن هذه الطريقة أبطأ وذات وثوقية أقل.
مؤشرات الفهرسة (Inodes)
في أنظمة لينكس و macOS، يستبين التابع fs.watch()
المسار إلى قيمة مؤشر الفهرسة (inode) ويراقب هذا المؤشر. إن حذف المسار الذي يخضع للمراقبة، فسيُسنَد إلى مؤشر فهرسة جديد. سيُطلِق المراقب حدثًا يتعلق بأمر الحذف الذي حصل، ولكنه سيستمر بعملية مراقبة مؤشر الفهرسة الأصلي (original inode). لن تُطلَق أية أحداث لمؤشر الفهرسة الجديد، لذا يجب أن يكون هذا متوقعًا. تحتفظ ملفات AIX بمؤشر الفهرسة نفسه خلال دورة حياة الملف. حفظ وإغلاق ملف مراقب في AIX سيؤدي إلى إطلاق تنبيهين أحدهما من أجل إضافة محتوى جديد والآخر من أجل الاقتطاع (truncation).
الوسيط filename
تمرير الوسيط filename
إلى دالة رد النداء مدعومٌ فق لينكس، وويندوز، و macOS، و AIX فقط. حتى في الأنظمة المدعومة، لا يُضمَن أن يُعطَى الوسيط filename
دومًا؛ نتيجةً لذلك، لا تفترض أن الوسيط filename
معطًى دومًا في رد النداء، وليكن هنالك احتمالية التراجع المنطقي في الشيفرة إن كانت قيمته null
.
fs.watch('somedir', (eventType, filename) => {
console.log(`event type is: ${eventType}`);
if (filename) {
console.log(`filename provided: ${filename}`);
} else {
console.log('filename not provided');
}
});
fs.watchFile(filename[, options], listener)
الإصدار | التغييرات |
---|---|
v7.6.0 | يمكن الآن أن يكون الوسيط filename كائنًا من النوع URL متوافق مع WHATWG باستعمال البروتوكول file: . ما زال هذا الدعم قيد التجريب.
|
v0.1.31 | أضيف هذا التابع. |
filename
: <string> | <Buffer> | <URL>options
: <string> | <Object>listener
: <Function>current
: <fs.Stats>previous
: <fs.Stats>
يراقب هذا التابع التغيرات التي تحصل على filename
. سيُستدعى رد النداء listener
في كل مرة يتم فيها الوصول إلى الملف. يمكن عدم تمرير الوسيط options
. إن أعطي، فيجب أن يكون كائنًا. قد يحوي الكائن options
قيمة منطقية تدعى persistent
تحدِّد إن كان يجب أن تستمر العملية بالعمل ما دامت عملية مراقبة الملف مستمرة. قد يحدِّد الكائن options
الخاصية interval
التي تشير إلى عدد المرات التي يجب فيها أن يُستطلَع الهدف بالميلي ثانية. يمرَّر إلى رد النداء listener
وسيطان هما الكائن fs.Stats
الذي يمثل الحالة الحالية، والكائن fs.Stats
الذي يمثل الحالة السابقة.
fs.watchFile('message.text', (curr, prev) => {
console.log(`the current mtime is: ${curr.mtime}`);
console.log(`the previous mtime was: ${prev.mtime}`);
});
إنَّ كلًا من كائني الحالة هذين هو نسخةٌ من fs.Stat
. للحصول على تنبيهات عند تعديل الملف وليس عند الوصول إليه، إنَّه من الضروري الموازنة بين curr.mtime
و prev.mtime
. عندما تصادف عملية مراقبة ملف باستعمال التابع fs.watchFile()
الخطأ ENOENT
، سيستدعي التابع آنذاك رد النداء listener
مرة واحدة مع تصفير جميع الحقول للكائنين الممرَّرين إليه (أو ضبطها إلى تاريخ البداية في يونكس بالنسبة للتواريخ). في ويندوز، ستكون قيمة الحقلين blksize
و blocks
هي undefined
بدلًا من الصفر. إن أنشئ الملف في وقت لاحق، فسيُستدعَى رد النداء listener
مجدَّدًا مع تمرير الكائنين الذين يحويان أحدث معلومات عن الحالة (stat). أصبح هذا التغير في سلوك التابع معتمدًا بدءًا من الإصدار v0.10. يعدُّ استعمال التابع fs.watch()
أكثر فاعليةً من استعمال fs.watchFile()
، و fs.unwatchFile()
. يجب أن يُستعمَل التابع fs.watch()
بدلًا من التابع fs.watchFile()
، و fs.unwatchFile()
ما أمكن ذلك. عندما يختفي ملفٌ يخضع للمراقبة عبر fs.watchFile()
ويظهر مجدَّدًا، ستكون حينئذٍ الحالة السابقة (previousStat) المُبلَّغ عنها في الحدث الثاني لرد النداء (إعادة ظهور الملف) نفس الحالة السابقة للحدث الأول لرد النداء (اختفاء الملف). هذا يحدث عندما:
- يُحذَف الملف ثم يُتبَع بتنفيذ عملية استعادة له، أو
- يعاد تسمية الملف مرتين، إذ يعاد تسمية الملف في المرة الثانية إلى اسمه الأصلي.
fs.write(fd, buffer[, offset[, length[, position]]], callback)
الإصدار | التغييرات |
---|---|
v10.10.0 | يمكن أن يكون المعامل buffer الآن كائنًا من النوع TypeError أو النوع DataView .
|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.4.0 | يمكن الآن أن يكون المعامل buffer كائنًا من النوع Uint8Array .
|
v7.2.0 | أصبح تمرير المعاملين offset و length اختياريًّا الآن.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.0.2 | أضيف هذا التابع. |
fd
: <integer>buffer
: <Buffer> | <TypedArray> | <DataView> يمثِّل جزءًا من ذاكرة التخزين المؤقتة التي ستُقرَأ منها البيانات المراد كتابتها في الملف.offset
: <integer> عددٌ صحيحٌ يحدِّد جزء البيانات من ذاكرة التخزين المؤقتةbuffer
المراد كتابته.length
: <integer> عددٌ صحيحٌ يحدِّد عدد البايتات المراد كتابتها في الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في الملف بدءًا من بداية الملف (أي يحدِّد مقدار الإنزياح من بداية الملف). إن كانtypeof position !=='number'
، فستُكتَب البيانات بدءًا من موضع المؤشر الحالي في الملف. اطلع على الدالةpwrite(2)
.callback
: <Function>err
: <Error>bytesWritten
: <integer>buffer
: <Buffer> | <TypedArray> | <DataView>
يكتب هذا التابع البيانات المحددة في الذاكرة buffer
في الملف ذي الواصف fd
المعطى. تأخذ دالة رد النداء ثلاثة وسائط هي: err
و bytesWritten
و buffer
، إذ يحدد bytesWritten
عدد البايتات التي كُتبَت من buffer
. إن استدعي هذا التابع مثل نظيره util.promisify()
، فسيُعيد كائنًا من النوع Promise
لكائن Object
مع الخاصيتين bytesWritten
و buffer
. إنه من غير الآمن استدعاء التابع fs.write()
عدة مرات مع نفس الملف دون انتظار رد النداء. في مثل هذه الحالة، يُنصَح باستعمال التابع fs.createWriteStream()
. في لينكس، لن يحرك مؤشر الكتابة إلى موضع معين عند فتح الملف في وضع الإضافة (append mode). ستتجاهل النواة الوسيط position
وستضيف البيانات إلى نهاية الملف دومًا.
fs.write(fd, string[, position[, encoding]], callback)
الإصدار | التغييرات |
---|---|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.2.0 | أصبح تمرير المعامل position اختياريًّا الآن.
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v0.11.5 | أضيف هذا التابع. |
fd
: <integer>string
: <string> سلسلة نصية تحوي البيانات المراد كتابتها في الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في الملف بدءًا من بداية الملف (أي يحدِّد مقدار الإنزياح من بداية الملف). إن كانtypeof position !== 'number'
، فستُكتَب البيانات بدءًا من موضع المؤشر الحالي في الملف. اطلع على الدالةpwrite(2)
.encoding
: <string> يمثِّل الترميز المتوقع للسلسلة النصية. القيمة الافتراضية هي:'utf8'
.callback
: <Function>
يكتب هذا التابع البيانات الموجودة في السلسلة النصية string
في الملف ذي الواصف fd
المعطى بشكل غير متزامن. إن لم يكون الوسيط string
سلسلةً نصيةً، فستُحوَّل حينئذٍ القيمة رغمًا عنها إلى الواحد. تأخذ دالة رد النداء ثلاثة وسائط هي: err
و written
و string
، إذ يحدد written
عدد بايتات السلسلة النصية المعطاة المطلوب كتابتها في الملف. لا يُشترَط أن تكون البايتات المكتوبة في الملف هي نفسها المحارف المعطاة في السلسلة النصية. اطلع على توثيق التابع Buffer.byteLength()
. إنه من غير الآمن استدعاء التابع fs.write()
عدة مرات مع نفس الملف دون انتظار رد النداء. في مثل هذه الحالة، يُنصَح باستعمال التابع fs.createWriteStream()
. في لينكس، لن يحرك مؤشر الكتابة إلى موضع معين عند فتح الملف في وضع الإضافة (append mode). ستتجاهل النواة الوسيط position
وستضيف البيانات إلى نهاية الملف دومًا.
fs.writeFile(file, data[, options], callback)
الإصدار | التغييرات |
---|---|
v10.10.0 | يمكن أن يكون المعامل data الآن كائنًا من النوع TypeError أو النوع DataView .
|
v10.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُرمَى الخطأ TypeError في وقت التشغيل إن لم يُمرَّر.
|
v7.4.0 | يمكن أن يكون المعامل data كائنًا من النوع Uint8Array .
|
v7.0.0 | لم يعد المعامل callback اختياريًّا بعد الآن. سيُطلَق تحذير إهمال مع المعرِّف DEP0013 إن لم يُمرَّر.
|
v5.0.0 | يمكن أن يكون المعامل file واصف ملفٍ الآن.
|
v0.1.29 | أضيف هذا التابع. |
file
: <string> | <Buffer> | <URL> | <integer> اسم أو واصف الملف.data
: <string> | <Buffer> | <TypedArray> | <DataView>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mod
: <integer> القيمة الافتراضية هي:0o666
.flag
: <string> اطلع على القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'w'
.
callback
: <Function>err
: <Error>
يكتب هذا التابع البيانات الموجودة في الوسيط data
في الملف file
المعطى بشكل غير متزامن، إذ يستبدل الملف إن كان موجودًا مسبقًا. يمكن أن يكون الوسيط data
سلسلةً نصيةً أو مخزنًا مؤقتًا في الذاكرة (buffer). سيُتجاهَل الخيار encoding
إن كان الوسيط data
مخزنًا مؤقتًا.
const data = new Uint8Array(Buffer.from('Hello Node.js'));
fs.writeFile('message.txt', data, (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
إن كان الوسيط options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز:
fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
يجب على واصف الملف المعطى أن يدعم عملية الكتابة على الملف. إنه من غير الآمن استدعاء التابع fs.writeFile()
عدة مرات مع نفس الملف دون انتظار رد النداء. في مثل هذه الحالة، يُنصَح باستعمال التابع fs.createWriteStream()
. إن أعطي واصف ملف للوسيط file
، فلن يُغلَق الملف تلقائيًّا.
fs.writeFileSync(file, data[, options])
الإصدار | التغييرات |
---|---|
v10.10.0 | يمكن أن يكون المعامل data الآن كائنًا من النوع TypeError أو النوع DataView .
|
v7.4.0 | يمكن أن يكون المعامل data كائنًا من النوع Uint8Array .
|
v5.0.0 | يمكن أن يكون المعامل file واصف ملفٍ الآن.
|
v0.1.29 | أضيف هذا التابع. |
file
: <string> | <Buffer> | <URL> | <integer> اسم أو واصف الملف.data
: <string> | <Buffer> | <TypedArray> | <DataView>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mod
: <integer> القيمة الافتراضية هي:0o666
.flag
: <string> اطلع على القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'w'
.
يكتب هذا التابع البيانات الموجودة في الوسيط data
في الملف file
المعطى بشكل متزامن، إذ يستبدل الملف إن كان موجودًا مسبقًا. يعيد هذا التابع القيمة undefined
. لمزيدٍ من التفاصيل، اطلع على توثيق الإصدار المتزامن من هذا التابع الذي هو fs.writeFile()
.
fs.writeSync(fd, buffer[, offset[, length[, position]]])
الإصدار | التغييرات |
---|---|
v10.10.0 | يمكن أن يكون المعامل buffer الآن كائنًا من النوع TypeError أو النوع DataView .
|
v7.4.0 | يمكن الآن أن يكون المعامل buffer كائنًا من النوع Uint8Array .
|
v7.2.0 | أصبح تمرير المعاملين offset و length اختياريًّا الآن.
|
v0.1.21 | أضيف هذا التابع. |
fd
: <integer>buffer
: <Buffer> | <TypedArray> | <DataView> يمثِّل جزءًا من ذاكرة التخزين المؤقتة التي ستُقرَأ منها البيانات المراد كتابتها في الملف.offset
: <integer> عددٌ صحيحٌ يحدِّد جزء البيانات من ذاكرة التخزين المؤقتةbuffer
المراد كتابته.length
: <integer> عددٌ صحيحٌ يحدِّد عدد البايتات المراد كتابتها في الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في الملف بدءًا من بداية الملف (أي يحدِّد مقدار الإنزياح من بداية الملف). إن كانtypeof position !== 'number'
، فستُكتَب البيانات بدءًا من موضع المؤشر الحالي في الملف. اطلع على الدالةpwrite(2)
.- القيم المعادة: <number> عدد البايتات التي كُتبَت.
يكتب هذا التابع البيانات المحددة في الذاكرة buffer
في الملف ذي الواصف fd
المعطى بشكل متزامن. لمزيدٍ من التفاصيل، اطلع على توثيق الإصدار المتزامن من هذا التابع الذي هو fs.write(fd, buffer...)
.
fs.writeSync(fd, string[, position[, encoding]])
الإصدار | التغييرات |
---|---|
v7.2.0 | أصبح تمرير المعامل position اختياريًّا الآن.
|
v0.11.5 | أضيف هذا التابع. |
fd
: <integer>string
: <string> سلسلة نصية تحوي البيانات المراد كتابتها في الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في الملف بدءًا من بداية الملف (أي يحدِّد مقدار الإنزياح من بداية الملف). إن كانtypeof position !== 'number'
، فستُكتَب البيانات بدءًا من موضع المؤشر الحالي في الملف. اطلع على الدالةpwrite(2)
.encoding
: <string> يمثِّل الترميز المتوقع للسلسلة النصية. القيمة الافتراضية هي:'utf8'
.
القيم المعادة: <number> عدد البايتات التي كُتبَت. يكتب هذا التابع البيانات الموجودة في السلسلة النصية string
في الملف ذي الواصف fd
المعطى بشكل متزامن. لمزيدٍ من التفاصيل، اطلع على توثيق الإصدار المتزامن من هذا التابع الذي هو fs.write(fd, string...)
.
واجهة الوعود (Promises) البرمجية في الوحدة fs
الاستقرار: 1 - قيد التجريب.
توفِّر الواجهة البرمجية fs.promises
مجموعةً بديلةً لتوابع نظام الملفات الغير متزامنة تعيد الكائن Promise
بدلًا من استعمال رد النداء. يمكن الوصول إلى هذه الواجهة البرمجية عبر require('fs').promises
.
الصنف FileHandle
أضيف في الإصدار: v10.0.0.
الكائن FileHandle
هو مغلفٌ لواصف ملفٍ عدديٍّ. تختلف النسخ المنشأة من FileHandle
عن واصفات الملفات العددية، إذ إن لم يُغلَق الكائن FileHandle
مثلًا بشكل صريح عبر استعمال التابع filehandle.close()
، فسيُغلَق واصف الملف تلقائيًّا وسيُصدَر تحذير بالعملية. هذا يساعد في منع حدوث تسريبٍ في الذاكرة. تُنشَأ نسخٌ من الصنف FileHandle
ضمنيًّا عبر التابع fsPromises.open()
. لا يُستعمَل واصف ملف عددي عبر الواجهات البرمجية التي تعتمد على الوعود خلافًا للواجهات البرمجية التي تعتمد على ردود النداء (مثل fs.fstat()
، و fs.fchown()
، و fs.fchmod()
، ...إلخ.). عوضًا عن ذلك، الواجهات البرمجية التي تعتمد على الوعود تستعمل الصنف FileHandle
لتجنب حدوث تسريب في واصفات الملفات غير المغلقة بشكل غير مقصود بعد أن يُقبَل الكائن Promise
أو يُرفَض.
filehandle.appendFile(data, options)
أضيف في الإصدار: v10.0.0.
data
: <string> | <Buffer>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mode
: <integer> القيمة الافتراضية هي:0o666
.flag
: <string> اطلع على القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'a'
.
- القيم المعادة: <Promise>
يضيف هذا التابع بيانات إلى هذا الملف، أو يُنشئ ملفًا إن لم يكن الملف موجودًا بعد. يمكن أن يكون الوسيط data
سلسلة نصية أو مخزنًا مؤقتًا في الذاكرة (buffer). يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية. إن كان الوسيط options
سلسلة نصية، فسيُحدِّد حينئذٍ الترميز. يجب أن يكون مقبض الملف FileHandle
مفتوحًا في وضع الإضافة (appending mode).
filehandle.chmod(mode)
أضيف في الإصدار: v10.0.0.
يعدِّل هذا التابع أذونات الملف. يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية.
filehandle.chown(uid, gid)
أضيف في الإصدار: v10.0.0.
يغيِّر هذا التابع المستخدم المالك للملف ثم سيُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية.
filehandle.close()
أضيف في الإصدار: v10.0.0.
- القيم المعادة: <Promise> يعاد كائن من النوع
Promise
الذي سيُقبَل متى ما أُغلِق واصف الملف الضمني، أو سيُرفَض إن حصل أي خطأ أثناء إغلاق الملف.
يوضح المثال التالي كيفية استعمال هذا التابع لإغلاق ملف:
const fsPromises = require('fs').promises;
async function openAndClose() {
let filehandle;
try {
filehandle = await fsPromises.open('thefile.txt', 'r');
} finally {
if (filehandle !== undefined)
await filehandle.close();
}
}
filehandle.datasync()
أضيف في الإصدار: v10.0.0.
- القيم المعادة: <Promise>
ينفِّذ هذا التابع استدعاء النظام fdatasync(2)
بشكل غير متزامن. يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية.
filehandle.fd
أضيفت في الإصدار: v10.0.0.
- <Promise> عدد يمثل واصف الملف المُدار من قِبَل الكائن
FileHandle
.
filehandle.read(buffer, offset, length, position)
أضيف في الإصدار: v10.0.0.
buffer
: <Buffer> | <Uint8Array> يمثِّل ذاكرة التخزين المؤقتة التي ستُكتَب فيها البيانات المقروءة من الملف.offset
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في ذاكرة التخزين المؤقتةbuffer
(أي مقدار الإزاحة من بدياتها).length
: <integer> عددٌ صحيحٌ يحدِّد عدد البايتات المراد قراءتها من الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية قراءة البيانات من الملف. إن كانت قيمة هذا الوسيطnull
، فستُقرَأ البيانات بدءًا من موضع المؤشر الحالي في الملف ثم سيُحدَّث موضع مؤشِّر الملف بعد انتهاء عملية القراءة. إن كانت قيمة هذا الوسيط عددًا صحيحًا، فسيبقى موضع مؤشِّر الملف دون تغيير.- القيم المعادة: <Promise>
يقرأ هذا التابع البيانات من الملف. عَقِب نجاح عملية القراءة، يُقبَل الكائن Promise
مع كائن يحوي الخاصية bytesRead
التي تحدد عدد البايتات التي قُرأَت، والخاصية buffer
التي تشير إلى محتوى الوسيط buffer
الذي يحوي البيانات التي قُرأَت من الملف.
filehandle.readFile(options)
أضيف في الإصدار: v10.0.0.
options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:null
.flag
: <string> اطلع على القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'r'
.
- القيم المعادة: <Promise>
يقرأ هذا التابع كامل محتوى ملفٍ بشكل غير متزامن. يُقبَل الكائن Promise
مع محتوى الملف. إن لم يُحدَّد أي ترميز (باستعمال الخيار options.encoding
)، فستُعاد البيانات ضمن كائن من النوع buffer
. أمَّا إن أعطي الترميز، فستُعاد البيانات ضمن سلسلة نصية. إن كان الوسيط options
سلسلة نصية، فسيُحدِّد حينئذٍ الترميز. عندما يكون المسار path
مجلدًا، سيختلف سلوك التابع fsPromises.readFile()
اعتمادًا على المنصة المستعملة؛ في أنظمة التشغيل macOS، ولينكس، وويندوز، سيؤدي ذلك إلى رفض الكائن Promise
مع خطأ. أمَّا في FreeBSD، فسيعاد تمثيلٌ بمحتوى المجلد. يجب على مقبض الملف FileHandle
المحدَّد أن يدعم عملية القراءة.
filehandle.stat([options])
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v10.0.0 | أضيف هذا التابع. |
options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوعbigint
. القيمة الافتراضية هي:false
.
- القيم المعادة: <Promise>
يجلب هذا التابع معلومات حول الملف (أي يعيد الكائن fs.Stats
للملف).
filehandle.sync()
أضيف في الإصدار: v10.0.0.
- القيم المعادة: <Promise>
ينفِّذ هذا التابع دالة النظام fsync(2)
بشكل غير متزامن. يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية.
filehandle.truncate(len)
أضيف في الإصدار: v10.0.0.
يقطع هذا التابع الملف إلى الحجم len
ثم يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية. إن كان حجم الملف أكبر من الحجم len
المعطى بالبايت، فستُعاد البايتات len
الأولى فقط من الملف. على سبيل المثال، يعيد البرنامج التالي البايتات الأربعة الأولى فقط من الملف:
const fs = require('fs');
const fsPromises = fs.promises;
console.log(fs.readFileSync('temp.txt', 'utf8'));
// Node.js سيُطبَع
async function doTruncate() {
let filehandle = null;
try {
filehandle = await fsPromises.open('temp.txt', 'r+');
await filehandle.truncate(4);
} finally {
if (filehandle) {
// إغلاق الملف إن كان مفتوحًا.
await filehandle.close();
}
}
console.log(fs.readFileSync('temp.txt', 'utf8')); // Node :سيُطبَع
}
doTruncate().catch(console.error);
إن كان حجم الملف أقل من الحجم len
المراد اقتطاعه، فسيُمدَّد حجم الملف إلى الحجم len
بالبايت وستُملَأ البايتات المضافة ببايتات عدمية (أي بالقيمة '\0'
):
const fs = require('fs');
const fsPromises = fs.promises;
console.log(fs.readFileSync('temp.txt', 'utf8'));
// Node.js :سيُطبَع
async function doTruncate() {
let filehandle = null;
try {
filehandle = await fsPromises.open('temp.txt', 'r+');
await filehandle.truncate(10);
} finally {
if (filehandle) {
// إغلاق الملف إن كان مفتوحًا
await filehandle.close();
}
}
console.log(fs.readFileSync('temp.txt', 'utf8')); // Node.js\0\0\0 :سيُطبَع
}
doTruncate().catch(console.error);
البايتات الأخيرة المضافة هي بايتات عدمية ('\0'
) تستعمل لتعويض البايتات الإضافية الناتجة عن عملية الإفراط في الاقتطاع (over-truncation).
filehandle.utimes(atime, mtime)
أضيف في الإصدار: v10.0.0.
atime
: <number> | <string> | <Date>mtime
: <number> | <string> | <Date>- القيم المعادة: <Promise>
يغيِّر هذا التابع بصمات وقت نظام الملفات للكائن المشار إليه بالمقبض FileHandle
ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية. لا يعمل هذا التابع على إصدارات AIX التي قبل 7.1، إذ سيقبل الكائن Promise
مع خطأ رمزه UV_ENOSYS
.
filehandle.write(buffer, offset, length, position)
أضيف في الإصدار: v10.0.0.
buffer
: <Buffer> | <TypedArray> | <DataView> يمثِّل جزءًا من ذاكرة التخزين المؤقتة التي ستُقرَأ منها البيانات المراد كتابتها في الملف.offset
: <integer> عددٌ صحيحٌ يحدِّد جزء البيانات من ذاكرة التخزين المؤقتةbuffer
المراد كتابته.length
: <integer> عددٌ صحيحٌ يحدِّد عدد البايتات المراد كتابتها في الملف.position
: <integer> عددٌ صحيحٌ يحدِّد موضع بداية كتابة البيانات في الملف بدءًا من بداية الملف (أي يحدِّد مقدار الإنزياح من بداية الملف). إن كانtypeof position !== 'number'
، فستُكتَب البيانات بدءًا من موضع المؤشر الحالي في الملف. اطلع على الدالةpwrite(2)
.- القيم المعادة: <Promise>
يكتب هذا التابع البيانات المحددة في الذاكرة buffer
في الملف. عَقِب نجاح عملية الكتابة، يُقبَل الكائن Promise
مع كائن يحوي الخاصية bytesWritten
التي تحدد عدد البايتات التي كُتبَت، والخاصية buffer
التي تشير إلى محتوى الوسيط buffer
الذي يحوي البيانات التي كُتبَت في الملف. إنه من غير الآمن استدعاء التابع filehandle.write()
عدة مرات مع نفس الملف دون انتظار قبول الكائن Promise
(أو رفضه). في مثل هذه الحالة، يُنصَح باستعمال التابع fs.createWriteStream()
. في لينكس، لن يحرك مؤشر الكتابة إلى موضع معين عند فتح الملف في وضع الإضافة (append mode). ستتجاهل النواة الوسيط position
وستضيف البيانات إلى نهاية الملف دومًا.
filehandle.writeFile(data, options)
أضيف في الإصدار: v10.0.0.
data
: <string> | <Buffer> | <TypedArray> | <DataView>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mod
: <integer> القيمة الافتراضية هي:0o666
.flag
: <string> اطلع على القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'w'
.
- القيم المعادة: <Promise>
يكتب هذا التابع البيانات الموجودة في الوسيط data
في الملف بشكل غير متزامن، إذ يستبدل الملف إن كان موجودًا مسبقًا. يمكن أن يكون الوسيط data
سلسلةً نصيةً أو مخزنًا مؤقتًا في الذاكرة (buffer). يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية. سيُتجاهَل الخيار encoding
إن كان الوسيط data
مخزنًا مؤقتًا (buffer). إن كان الوسيط options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز. يجب على مقبض الملف FileHandle
المعطى أن يدعم عملية الكتابة على الملف. إنه من غير الآمن استدعاء التابع filehandle.writeFile()
عدة مرات مع نفس الملف دون قبول الكائن Promise
(أو رفضه).
fsPromises.access(path[, mode])
أضيف في الإصدار: v10.0.0.
path
: <string> | <Buffer> | <URL>mode
: <integer> القيمة الافتراضية هي:fs.constants.F_OK
.- القيم المعادة: <Promise>
يفحص هذا التابع أذونات المستخدم للملف أو المجلد المحدَّد في المسار path
. الوسيط mode
الاختياري هو عددٌ صحيحٌ يحدِّد عمليات التحقق من قابلية الوصول المراد تنفيذها. اطلع على القسم «ثوابت الوصول للملف» لمعرفة القيمة المتاحة للوسيط mode
. يمكن إنشاء قناع يتألف من ثابتين أو أكثر عبر عملية الدمج الثنائية (bitwise) باستعمال المعامل OR (مثل fs.constants.W_OK | fs.constants.R_OK
). إن نجحت عملية التحقق من قابلية الوصول، فسيُقبَل الكائن Promise
دون أية قيمة. وإن فشلت عملية التحقق من أيِّ قابليةٍ للوصول، فسيُرفَض الكائن Promise
مع الكائن Error
. يتحقق المثال التالي إن كان الملف /etc/passwd
قابلًا للقراءة أو الكتابة من قِبَل العملية الحالية:
const fs = require('fs');
const fsPromises = fs.promises;
fsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)
.then(() => console.log('can access'))
.catch(() => console.error('cannot access'));
لا يُنصَح باستدعاء fsPromises.access()
للتحقُّق من قابلة الوصول للملف قبل استدعاء fsPromises.open()
، إذ يؤدي فعل ذلك إلى خلق «حالة تسابق» (race condition) لأنَّه ربما قد تُغيِّر عمليات أخرى حالة الملف بين الاستدعائين. بدلًا من ذلك، يجب على شيفرة المستخدم أن تفتح وتقرأ وتكتب في الملف مباشرةً وأن تعالج أي خطأ يُطلَق إن لم يكن الملف قابلًا للوصول.
fsPromises.appendFile(path, data[, options])
أضيف في الإصدار: v10.0.0.
path
: <string> | <Buffer> | <URL> | <number> اسم أو مقبض (FileHandle
) الملف.data
: <string> | <Buffer>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mode
: <integer> القيمة الافتراضية هي:0o666
.mode
: <string> ارجع إلى القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'a'
.
- القيم المعادة: <Promise>
يضيف هذا التابع بياناتٍ إلى ملف بشكل غير متزامن، أو ينشئ ملفًا ويضع البيانات فيه إن لم يكن هذا الملف موجودًا. يمكن أن تكون البيانات data
المراد كتابتها سلسلةً نصيةً أو كائنًا من النوع Buffer
. يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية. إن كان الوسيط options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز. يمكن أن يُعطَى المسار path
كمقبض FileHandle
لملفٍ فُتِح لإضافة البيانات فيه (باستعمال fsPromises.open()
). لن يُغلَق واصف الملف بشكل تلقائي.
fsPromises.chmod(path, mode)
أضيف في الإصدار: v10.0.0.
يغيِّر هذا التابع بشكل غير متزامن أذونات ملفٍ ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية.
fsPromises.chown(path, uid, gid)
أضيف في الإصدار: v10.0.0.
يغيِّر هذا التابع بشكل غير متزامن المالك والمجموعة المالكة لملف ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية.
fsPromises.copyFile(src, dest[, flags])
أضيف في الإصدار: v10.0.0.
src
: <string> | <Buffer> | <URL> اسم الملف المراد نسخه.dest
: <string> | <Buffer> | <URL> اسم الملف الوجهة الذي سيُنسَخ في الملف المحدَّد في المعامل src.flags
: <number> مُعدِّلات (modifiers) عملية النسخ. القيمة الافتراضية هي: 0.- القيم المعادة: <Promise>
ينسخ هذا التابع ملفًا من src
إلى dest
بشكل غير متزامن. يُستبدَل ملف الوجهة المحدد بالوسيط dest
إن كان موجودًا مسبقًا بشكل افتراضي. يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية. لا تعطِ Node.js أية ضمانات متعلقة بتجزئة عملية النسخ. إن حصل أي خطأ بعد فتح الملف الوجهة للكتابة، ستحاول Node.js إزالته. الوسيط flags
اختياري وهو عددٌ صحيحٌ يحدِّد سلوك عملية النسخ. يمكن إنشاء قناع يتألف من ثابتين أو أكثر عبر عملية الدمج الثنائية (bitwise) باستعمال المعامل OR (مثل fs.constants.COPYFILE_FICLONE | fs.constants.COPYFILE_EXCL
). الثوابت المدعومة هي:
fs.constants.COPYFILE_EXCL
: ستفشل عملية النسخ إن كان الملفdest
موجودًا من قبل.
fs.constants.COPYFILE_FICLONE
: ستحاول عملية النسخ إنشاء وصلة مرجعية (reflink) بنمط «النسخ عند الكتابة» (copy-on-write). إن لم تدعم المنصة نمط «النسخ عند الكتابة»، فستُستخدَم آلية النسخ التراجعي (fallback copy).
fs.constants.COPYFILE_FICLONE
: ستحاول عملية النسخ إنشاء وصلة مرجعية (reflink) بنمط «النسخ عند الكتابة» (copy-on-write). إن لم تدعم المنصة نمط «النسخ عند الكتابة»، فستفشل عملية النسخ.
const fsPromises = require('fs').promises;
// أو سيُستبدَل بشكل افتراضي destination.txt سيُنشَأ الملف
fsPromises.copyFile('source.txt', 'destination.txt')
.then(() => console.log('source.txt was copied to destination.txt'))
.catch(() => console.log('The file could not be copied'));
إن كان الوسيط الأخير عددًا، فهو يحدِّد الوسيط flags
:
const fs = require('fs');
const fsPromises = fs.promises;
const { COPYFILE_EXCL } = fs.constants;
// موجودًا من قبل destination.txt ستفشل العملية إن كان الملف ،COPYFILE_EXCL باستخدام الثابت
fsPromises.copyFile('source.txt', 'destination.txt', COPYFILE_EXCL)
.then(() => console.log('source.txt was copied to destination.txt'))
.catch(() => console.log('The file could not be copied'));
fsPromises.lchmod(path, mode)
أضيف في الإصدار: v10.0.0.
يغيِّر هذا التابع أذونات وصلةٍ رمزيةٍ بشكل غير متزامن ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية. هذا التابع متاحٌ في أنظمة macOS فقط.
fsPromises.lchown(path, uid, gid)
سجل التغييرات
الإصدار التغييرات v10.6.0 لم تعد هذه الواجهة البرمجية مهملةً بعد الآن. v10.0.0 أضيف هذا التابع.
يغيِّر هذا التابع بشكل غير متزامن المالك والمجموعة المالكة لوصلةٍ رمزيةٍ ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية.
fsPromises.link(existingPath, newPath)
أضيف في الإصدار: v10.0.0.
existingPath
: <string> | <Buffer> | <URL>newPath
: <string> | <Buffer> | <URL>- القيم المعادة: <Promise>
ينشئ هذا التابع وصلةً جديدةً (وصلةً صلبةً) للملف الحالي عبر استدعاء link(2)
بشكل غير متزامن. يُقبَل الكائن Promise
دون أية وسائط عند نجاح العملية.
fsPromises.lstat(path[, options])
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v10.0.0 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
- القيم المعادة: <Promise>
يجلب هذا التابع معلومات حول الوصلة الرمزية ذات المسار path
عبر استدعاء دالة النظام lstat(2)
بشكل غير متزامن. يُقبَل الكائن Promise
مع الكائن fs.Stats
للوصلة الرمزية المعطاة عند نجاح العملية.
fsPromises.mkdir(path[, mode])
أضيف في الإصدار: v10.0.0.
path
: <string> | <Buffer> | <URL>mode
: <integer> القيمة الافتراضية هي:0o777
.- القيم المعادة: <Promise>
ينشئ هذا التابع مجلدًا جديدًا بشكل غير متزامن ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية.
fsPromises.mkdtemp(prefix[, options])
أضيف في الإصدار: v10.0.0.
prefix
: <string>options
: <string> | <Object>encoding
: <string> القيمة الافتراضية هي:'utf8'
.
- القيم المعادة: <Promise>
ينشئ هذا التابع مجلدًا فريدًا مؤقتًا بشكل غير متزامن ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية. يولِّد هذا التابع ستة محارف عشوائية لتضاف إلى نهاية البادئة prefix
المعطاة لإنشاء مجلدٍ فريدٍ مؤقتٍ. يمكن أن يكون الوسيط options
سلسلةً نصيةً تحدِّد الترميز، أو كائنًا مع الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله.
fsPromises.mkdtemp(path.join(os.tmpdir(), 'foo-'))
.catch(console.error);
سيضيف التابع fsPromises.mkdtemp()
المحارف الستة العشوائية المختارة مباشرةً إلى السلسلة prefix
النصية. على سبيل المثال، إن كان لدينا المجلد /tmp
وأردنا إنشاء مجلد مؤقت داخله، فيجب أن تنتهي البادئة prefix
بالفاصلة الزائدة المستخدمة عادةً في فصل المسار في المنصة المستعملة آنذاك (require('path').sep
).
fsPromises.open(path, flags[, mode])
أضيف في الإصدار: v10.0.0.
path
: <string> | <Buffer> | <URL>flags
: <string> | <number> اطلع على القسم «دعم رايات نظام الملفات».mode
: <integer> القيمة الافتراضية هي:0o666
(قابلية القراءة والكتابة).- القيم المعادة: <Promise>
يفتح هذا التابع ملفًا بشكل غير متزامن ثم يعيد الكائن Promise
مع المقبض FileHandle
لذاك الملف عند نجاح العملية. اطلع على توثيق الدالة open(2)
لتفاصيل أوسع. يضبط الوسيط mode
نمط الملف (الأذونات والبتات اللاصقة [sticky bits]) في حال لم يكن الملف موجودًا وأنشئ آنذاك. تأخذ دالة رد النداء وسيطين هما: err
و fd
. تعدُّ بعض المحارف (مثل < > : " / \ | ? *
) محجوزةً في ويندوز كما أشير إلى ذلك التوثيق «تسمية الملفات، والمسارات، ومجالات الأسماء». في نظام الملفات NTFS، إن احتوى اسم الملف نقطتين رأسيتين، فستفتح Node.js مجرًى في نظام الملفات كما موضح في هذه الصفحة.
fsPromises.readdir(path[, options])
الإصدار | التغييرات |
---|---|
v10.10.0 | أضيف الخيار withFileTypes .
|
v10.0.0 | أضيف هذا التابع. |
يقرأ هذا التابع محتوى المجلد المعطى بشكل غير متزامن ثم يقبل الكائن Promise
مع مصفوفة تحوي أسماء الملفات في المجلد باستثناء المجلد '.'
والمجلد '..'
. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله لأسماء الملفات الممرَّرة إلى دالة رد النداء. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فستُمرَّر أسماء الملفات المعادة ككائنات من النوع Buffer
. إن ضُبِط الخيار options.withFileTypes
إلى القيمة true
، فستحوي المصفوفة files
الكائنات fs.Dirent
.
fsPromises.readFile(path[, options])
أضيف في الإصدار: v10.0.0.
path
: <string> | <Buffer> | <URL> | <integer> اسمُ أو مقبض (FileHandle
) ملفٍ.options
: <string> | <Object>encoding
: <string> | <null> القيمة الافتراضية هي:null
.flag
: <string> اطلع على قسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'r'
.
- القيم المعادة: <Promise>
يقرأ هذا التابع كامل محتوى الملف ذي المسار path
بشكل غير متزامن. يُقبَل الكائن Promise
مع محتوى الملف. إن لم يُحدَّد أي ترميز (باستعمال options.encoding
)، فسيكون نوع البيانات المعادة هو كائنٌ من النوع Buffer
. أمَّا إن حُدِّد الترميز، فستوضع البيانات المعادة في سلسلة نصية. إن كان الوسيط options
سلسلة نصية، فسيُحدِّد حينئذٍ الترميز. عندما يكون المسار path
مجلدًا، سيختلف سلوك التابع fsPromises.readFile()
اعتمادًا على المنصة المستعملة؛ في أنظمة التشغيل macOS، ولينكس، وويندوز، سيؤدي ذلك إلى رفض الكائن Promise
مع خطأ. أمَّا في FreeBSD، فسيعاد تمثيلٌ بمحتوى المجلد. يجب على مقبض الملف FileHandle
المعطى أن يدعم عملية القراءة.
fsPromises.readlink(path[, options])
أضيف في الإصدار: v10.0.0.
يقرأ هذا التابع محتوى الوصلة الرمزية ذات المسار path
عبر استدعاء الدالة readlink(2)
بشكل غير متزامن. يُقبَل الكائن Promise
مع محتوى الوصلة linkString
عند نجاح العملية. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع مسار الوصلة المعاد. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر مسار الوصلة المعاد ككائن من النوع Buffer
.
fsPromises.realpath(path[, options])
أضيف في الإصدار: v10.0.0.
يحدِّد هذا التابع الموضع الحقيقي للمسار path
باستعمال نفس الدلالات التي يستعملها التابع fs.realpath.native()
ثم يقبل الكائن Promise
المسار المستبين. المسارات المدعومة هي المسارات التي يمكن تحويلها إلى سلاسل نصية مرمزة بالترميز UTF8 فقط. يمكن أن يكون الوسيط options
الاختياري سلسلة نصية تحدِّد الترميز المراد استعماله، أو كائنًا يملك الخاصية encoding
التي تحدِّد ترميز المحارف المراد استعماله مع المسار. إن ضُبطَت الخاصية encoding
إلى القيمة 'buffer'
، فسيُمرَّر المسار المعاد ككائن من النوع Buffer
. في لينكس، عندما تُربَط Node.js مع المكتبة musl libc، يجب أن يوصل (mount) نظام الملفات procfs في /proc
لكي يعمل هذا التابع بشكل صحيح. أما المكتبة glibc، فلا تشترط ذلك.
fsPromises.rename(oldPath, newPath)
أضيف في الإصدار: v10.0.0.
oldPath
: <string> | <Buffer> | <URL>newPath
: <string> | <Buffer> | <URL>- القيم المعادة: <Promise>
يغيِّر هذا التابع اسم الملف oldPath
إلى newPath
المعطى بشكل غير متزامن ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية.
fsPromises.rmdir(path)
أضيف في الإصدار: v10.0.0.
يحذف هذا التابع المجلد ذا المسار path
ثم يقبل الكائن Promise
دون أية وسائط عند نجاح العملية. يؤدي استعمال التابع fsPromises.rmdir()
مع ملف (وليس مجلد) إلى رفض الكائن Promise
مع الخطأ ENOENT
في ويندوز والخطأ ENOTDIR
في أنظمة POSIX.
fsPromises.stat(path[, options])
الإصدار | التغييرات |
---|---|
v10.5.0 | يقبل التابع كائن options إضافي يحدِّد إذا كان يجب أن تكون القيم العددية المعادة من النوع bigint .
|
v10.0.0 | أضيف هذا التابع. |
path
: <string> | <Buffer> | <URL>options
: <Object>bigint
: <boolean> يحدِّد إذا كان يجب أن تكون القيم العددية في الكائنfs.Stats
المعاد من النوع bigint. القيمة الافتراضية هي:false
.
- القيم المعادة: <Promise>
يجلب هذا التابع معلومات حول الملف ذي المسار path
بشكل غير متزامن ثم يقبل الكائن Promise
مع الكائن fs.Stats
لذاك الملف.
fsPromises.symlink(target, path[, type])
أضيف في الإصدار: v10.0.0.
target
: <string> | <Buffer> | <URL>path
: <string> | <Buffer> | <URL>type
: <string> القيمة الافتراضية هي:'file'
.- القيم المعادة: <Promise>
ينشئ هذا التابع وصلة رمزيَّةً للملف المحدد بالمسار target
بشكل غير متزامن ثم يقبل الكائن Promise
دون أي وسائط عند نجاح العملية. يمكن ضبط الوسيط type
إلى القيمة 'dir'
، أو 'file'
، أو 'junction'
وهو متاح في ويندوز فقط (يُتجاهل في المنصات الأخرى). تتطلب نقاط الوصل (junction points) في ويندوز أن يكون المسار الهدف مطلقًا. عند استعمال 'junction'
، سيحول الوسيط target
تلقائيًّا إلى مسار مطلق.
fsPromises.truncate(path[, len])
أضيف في الإصدار: v10.0.0.
path
: <string> | <Buffer> | <URL>len
: <integer> القيمة الافتراضية هي:0
.- القيم المعادة: <Promise>
يقطع هذا التابع الملف ذا المسار path
إلى الحجم len
ثم يقبل الكائن Promise
دون أي وسائط عند نجاح العملية. يجب أن يكون المسار path
سلسلة نصية أو كائنًا من النوع Buffer
.
fsPromises.unlink(path)
أضيف في الإصدار: v10.0.0.
يزيل هذا التابع ملفًا أو وصلةً رمزيةً عبر تنفيذ الدالة unlink(2)
بشكل غير متزامن ثم يقبل الكائن Promise
دون أي وسائط عند نجاح العملية.
fsPromises.utimes(path, atime, mtime)
أضيف في الإصدار: v10.0.0.
filename
: <string> | <Buffer> | <URL>atime
: <number> | <string> | <Date>mtime
: <number> | <string> | <Date>- القيم المعادة: <Promise>
يغيِّر هذا التابع بصمات وقت نظام الملفات للكائن المشار إليه بالمسار path
المعطى بشكل غير متزامن ثم يقبل الكائن Promise
دون أي وسائط عند نجاح العملية. يخضع الوسيطان atime
و mtime
إلى القاعدتين التاليتين:
- يمكن أن تكون القيم إما أعدادًا تمثل الوقت في توقيت يونكس (Unix epoch time)، أو تواريخ، أو سلاسل نصية عددية مثل
'123456789.0'
. - إن لم يكن بالإمكان تحويل القيمة إلى عددٍ، أو كانت
NaN
أوInfinity
أوInfinity-
، فسيُرمَى خطأٌ.
fsPromises.writeFile(file, data[, options])
أضيف في الإصدار: v10.0.0.
file
: <string> | <Buffer> | <URL> | <integer> اسم أو مقبض (FileHandle
) الملف.data
: <string> | <Buffer> | <TypedArray> | <DataView>options
: <Object> | <string>encoding
: <string> | <null> القيمة الافتراضية هي:'utf8'
.mod
: <integer> القيمة الافتراضية هي:0o666
.flag
: <string> اطلع على القسم «دعم رايات نظام الملفات». القيمة الافتراضية هي:'w'
.
- القيم المعادة: <Promise>
يكتب هذا التابع البيانات الموجودة في الوسيط data
في الملف file
المعطى بشكل غير متزامن، إذ يستبدل الملف إن كان موجودًا مسبقًا. يمكن أن يكون الوسيط data
سلسلةً نصيةً أو مخزنًا مؤقتًا في الذاكرة (buffer). يُقبَل الكائن Promise
دون أي وسائط عند نجاح العملية. سيُتجاهَل الخيار encoding
إن كان الوسيط data
مخزنًا مؤقتًا. إن كان الوسيط options
سلسلةً نصيةً، فسيُحدِّد حينئذٍ الترميز. يجب على مقبض الملف FileHandle
المعطى أن يدعم عملية الكتابة على الملف. إنه من غير الآمن استدعاء التابع fsPromises.writeFile()
عدة مرات مع نفس الملف دون انتظار قبول الكائن Promise
(أو رفضه).
الثوابت المستعملة في الوحدة fs
يمكن تصدير الثوابت الموجودة في هذا القسم عبر استدعاء fs.constants
. انتبه إلى أنه لن تكون جميع الثوابت متاحةً على جميع أنظمة التشغيل.
ثوابت الوصول للملف
تستخدم الثوابت التالية مع التابع fs.access()
:
الثابت | الوصف |
---|---|
F_OK
|
رايةٌ تشير إلى أن الملف ظاهرٌ للعملية المستدعاة. هذا مفيدٌ لتحديد إن كان الملف موجودًا أم ولا، ولكنه لا يفيد بتحديد أذوناته.
هذا الثابت هو القيمة الافتراضية المستعملة عند عدم تحديد أي ثابت. |
R_OK
|
رايةٌ تشير إلى أنَّ الملف قابل للقراءة من قبل العملية المستدعاة. |
W_OK
|
رايةٌ تشير إلى أنَّ الملف قابل للكتابة من قبل العملية المستدعاة. |
X_OK
|
رايةٌ تشير إلى أنَّ الملف قابل للتنفيذ من قبل العملية المستدعاة. ليس لهذه الراية أي تأثير في ويندوز (ستسلك نفس سلوك الراية fs.constants.F_OK ).
|
ثوابت نسخ الملف
تستخدم الثوابت التالية مع التابع fs.copyFile()
:
الثابت | الوصف |
---|---|
COPYFILE_EXCL
|
ستفشل عملية النسخ مع خطأ إن كان الملف موجودًا من قبل في المسار الوجهة المراد إنشاء نسخة فيه. |
COPYFILE_FICLONE
|
إن وُجِد، فستحاول عملية النسخ إنشاء وصلة مرجعية (reflink) بنمط «النسخ عند الكتابة» (copy-on-write). إن لم تدعم المنصة نمط «النسخ عند الكتابة»، فستُستخدَم آلية النسخ التراجعي (fallback copy). |
COPYFILE_FICLONE_FORCE
|
إن وُجِد، فستحاول عملية النسخ إنشاء وصلة مرجعية (reflink) بنمط «النسخ عند الكتابة» (copy-on-write). إن لم تدعم المنصة نمط «النسخ عند الكتابة»، فستفشل عملية النسخ مع خطأ. |
ثوابت فتح الملف
تستخدم الثوابت التالية مع التابع fs.open()
:
الثابت | الوصف |
---|---|
O_RDONLY
|
رايةٌ تشير إلى فتح الملف في نمط القراءة فقط. |
O_WRONLY
|
راية تشير إلى فتح الملف في نمط الكتابة فقط. |
O_RDWR
|
رايةٌ تشير إلى فتح الملف في نمط القراءة والكتابة فقط. |
O_CREAT
|
رايةٌ تشير إلى إنشاء الملف إن لم يكن موجودًا من قبل. |
O_EXCL
|
رايةٌ تشير إلى أن عملية فتح الملف يجب أن تفشل إن استعملت الراية وكان الملف موجودًا من قبل. |
O_NOCTTY
|
رايةٌ تشير إلى أنه إذا كان المسار يعرِّف جهازًا طرفيًّا (terminal device)، فيجب ألا يؤدي فتح المسار إلى جعل تلك الطرفية هي الطرفية المتحكمة بالعملية (إن لم تملك العملية واحدةً مسبقًا). |
O_TRUNC
|
رايةٌ تشير إلى أنه إذا كان الملف موجودًا وهو ملف طبيعي وفتح الملف بنجاح للكتابة فيه، فيجب أن يُقلَّص حجمه إلى الصفر. |
O_APPEND
|
رايةٌ تشير إلى أن البيانات ستضاف في نهاية الملف دومًا. |
O_DIRECTORY
|
رايةٌ تشير إلى أن العملية يجب أن تفشل إن كان المسار المعطى لا يمثِّل مجلدًا. |
O_NOATIME
|
رايةٌ تشير إلى أنه لن ينتج عن عملية الوصول إلى نظام الملفات من أجل القراءة تحديثَ معلومات الوقت atime المرتبط بالملف.
هذه الراية متاحةٌ للاستعمال في أنظمة لينكس فقط. |
O_NOFOLLOW
|
رايةٌ تشير إلى أنه يجب ان تفشل العملية إن كان المسار يمثِّل وصلةً رمزيةً. |
O_SYNC
|
رايةٌ تشير إلى أنه يُفتَح الملف من أجل الدخل والخرج المتزامن (synchronized I/O) مع انتظار عمليات الكتابة للحفاظ على سلامة الملف. |
O_DSYNC
|
رايةٌ تشير إلى أنه يُفتَح الملف من أجل الدخل والخرج المتزامن (synchronized I/O) مع انتظار عمليات الكتابة للحفاظ على سلامة البيانات. |
O_SYMLINK
|
رايةٌ تشير إلى فتح الوصلة الرمزية نفسها بدلًا من فتح المورد الذي تشير إليه. |
O_DIRECT
|
عند استعمال هذه الراية، ستُجرَى محاولةٌ لتقليل تأثيرات التخزين المؤقت (caching) لدخل وخرج الملف (file I/O). |
O_NONBLOCK
|
رايةٌ تشير إلى فتح الملف في وضع عدم الحجز (nonblocking mode) إن أمكن ذلك. |
ثوابت نوع الملف
تستعمل الثوابت التالية الخاصية mode
للكائن fs.Stats
لتحديد نوع الملف.
الثابت | الوصف |
---|---|
S_IFMT
|
قناع بتِّي (bit make) يُستعمَل لاستخراج رمز نوع الملف. |
S_IFREG
|
ثابت نوع الملف من أجل ملف طبيعي (regular file). |
S_IFDIR
|
ثابت نوع الملف من أجل مجلد. |
S_IFCHR
|
ثابت نوع الملف من أجل ملف جهاز محرفي التوجه (character-oriented device file). |
S_IFBLK
|
ثابت نوع الملف من أجل ملف جهاز كتلي التوجه (block-oriented device file). |
S_IFIFO
|
ثابت نوع الملف من أجل الأنبوب FIFO (اختصار للعبارة first-in-first-out أي «من دخل أولًا يخرج أولًا»، كما يدعى أحيانًا «أنبوبًا مسمًى») |
S_IFLNK
|
ثابت نوع ملف من أجل وصلة رمزية. |
S_IFSOCK
|
ثابت نوع ملف من أجل مقبس. |
ثوابت نمط الملف
تستعمل الثوابت التالية الخاصية mode
للكائن fs.Stats
لتحديد أذونات الوصول للملف.
الثابت | الوصف |
---|---|
S_IRWXU
|
نمط ملف يشير إلى قابلية القراءة والكتابة والتنفيذ من قبل المالك. |
S_IRUSR
|
نمط ملف يشير إلى قابلة القراءة من قبل المالك. |
S_IWUSR
|
نمط ملف يشير إلى قابلية الكتابة من قبل المالك. |
S_IXUSR
|
نمط ملف يشير إلى قابلة التنفيذ من قبل المالك. |
S_IRWXG
|
نمط ملف يشير إلى قابلية القراءة والكتابة والتنفيذ من قبل المجموعة المالكة. |
S_IRGRP
|
نمط ملف يشير إلى قابلة القراءة من قبل المجموعة المالكة. |
S_IWGRP
|
نمط ملف يشير إلى قابلية الكتابة من قبل المجموعة المالكة. |
S_IXGRP
|
نمط ملف يشير إلى قابلة التنفيذ من قبل المجموعة المالكة. |
S_IRWXO
|
نمط ملف يشير إلى قابلية القراءة والكتابة والتنفيذ من قبل الآخرين. |
S_IROTH
|
نمط ملف يشير إلى قابلة القراءة من قبل الآخرين. |
S_IWOTH
|
نمط ملف يشير إلى قابلية الكتابة من قبل الآخرين. |
S_IXOTH
|
نمط ملف يشير إلى قابلة التنفيذ من قبل الآخرين. |
رايات نظام الملفات
الرايات التالية متاحة متى ما قبل الخيار flag
أن يأخذ سلسلة نصية:
'a'
: فتح الملف من أجل الإضافة (appending). سيُنشأ الملف إن لم يكون موجودًا.'ax'
: شبيهةٌ بالراية'a'
باستثناء أن العملية ستفشل إن كان الملف موجودًا.'a+'
: فتح الملف للقراءة والإضافة. سيُنشَا الملف إن لم يكن موجودًا.'ax+'
: شبيهةٌ بالراية'a+'
باستثناء أن العملية ستفشل إن كان الملف موجودًا.'as'
: فتح الملف للإضافة في وضع التزامن (synchronous mode). سيُنشَأ الملف إن لم يكن موجودًا.'as+'
: فتح الملف للقراءة والإضافة في وضع التزامن. سيُنشَأ الملف إن لم يكن موجودًا.'r'
: فتح الملف للقراءة. سيُطلَق استثناء إن لم يكن الملف موجودًا.'r+'
: فتح الملف للقراءة والكتابة. سيُطلَق استثناء إن لم يكن الملف موجودًا.'rs+'
: فتح الملف للقراءة والكتابة في وضع التزامن. سيُوجَّه نظام التشغيل لتجاوز التخزين المؤقت في نظام الملفات.
الفائدة الأساسية في استعمال هذه الراية هي في فتح الملفات نظام الملفات NFS الموصول (mount)، إذ تسمح بتخطي ذاكرة التخزين المؤقتة المحلية (local cache) التي يحتمل أن تكون قديمة. إن لهذه الراية تأثير حقيقي كبير جدًا على أداء المدخلات والمخرجات (I/O)/ لذا لا يوصى باستعمال هذه الراية إلا عند الحاجة الماسَّة إليها. إن هذا لن يحول التابع fs.open()
أو fsPromises.open()
إلى الاستدعاء الكتلي المتزامن (synchronous blocking call). إن كان من المستحسن استعمال عملية متزامنة، فيجب استعمال شيء شبيه بالتابع fs.openSync()
.
'w'
: فتح الملف للكتابة. سيُنشَأ الملف إن لم يكن موجودًا أو سيُقتطَع إن كان موجودًا.'wx'
: شبيهةٌ بالراية'w'
باستثناء أن العملية ستفشل إن ان الملف موجودًا.'w+'
: فتح الملف للقراءة والكتابة. سيُنشَأ الملف إن لم يكن موجودًا أو سيُقتطَع إن كان موجودًا.'wx+'
: شبيهةٌ بالراية'w+'
باستثناء أن العملية ستفشل إن كان الملف موجودًا.
يمكن أن يكون الخيار flag
عددًا أيضًا كما هو مذكور في توثيق الدالة open(2)
. الثوابت ذات الاستعمال الشائع متاحةٌ عبر استدعاء fs.constants
. في ويندوز، تحول الرايات إلى ما يقابلها أينما أمكن ذلك مثل تحويل O_WRONLY
إلى FILE_GENERIC_WRITE
أو تحويل O_EXCL|O_CREAT
إلى CREATE_NEW
لتُقبَل عبر CreateFileW
. تتأكد الراية 'x'
(هي الراية O_EXCL
في open(2)
) أن المسارات قد أُنشئَت حديثًا. في أنظمة POSIX، يعد مسارٌ موجودًا حتى إن كان وصلةً رمزيةً تشير إلى ملف غير موجود. الراية 'x'
قد تعمل أو قد لا تعمل مع أنظمة ملفات الشبكة. في لينكس، لن يحرك مؤشر الكتابة إلى موضع معين عند فتح الملف في وضع الإضافة (append mode). ستتجاهل النواة الوسيط position
وستضيف البيانات إلى نهاية الملف دومًا. تعديل ملف بدلًا من استبداله قد يتطلَّب فتحه في الوضع 'r+'
بدلًا من الوضع 'w'
الافتراضي. يعتمد سلوك بعض الرايات على المنصة المستعملة آنذاك. بناءً على ذلك، سيعيد فتح مجلدٍ في نظام التشغيل maxOS أو لينكس مع الراية 'a+'
خطأً (انظر المثال الآتي). في المقابل، سيعاد واصف ملف أو مقبص الملف FileHandle
في ويندوز و FreeBSD.
// macOS and Linux
fs.open('<directory>', 'a+', (err, fd) => {
// => [Error: EISDIR: illegal operation on a directory, open <directory>]
});
// Windows and FreeBSD
fs.open('<directory>', 'a+', (err, fd) => {
// => null, <fd>
});
في ويندوز، ستفشل عملية فتح ملف موجود مخفي باستعمال الراية 'w'
(سواءً عبر التابع fs.open()
أو التابع fs.writeFile()
أو التابع fsPromises.open()
) مع الخطأ EPERM
. يمكن فتح ملف موجود ولكنه مخفي من أجل الكتابة مع الراية 'r+'
. يمكن استعمال التابع fs.ftruncate()
أو التابع filehandle.truncate()
لمسح جميع محتويات الملف.