Node.js نفسها لا توفر واجهة برمجة التطبيقات لنسخ الملفات مباشرة. إذا كنت ترغب في نسخ الملفات أو الدلائل باستخدام Node.js ، فأنت بحاجة إلى استخدام واجهات برمجة التطبيقات الأخرى لتنفيذها. يمكنك استخدام readfile و writefile مباشرة لنسخ ملف واحد ، وهو أسهل. إذا قمت بنسخ جميع الملفات في الدليل ، وقد يحتوي الدليل أيضًا على دليل فرعي ، فأنت بحاجة إلى استخدام واجهة برمجة تطبيقات أكثر تقدماً.
تدفق
التدفقات هي طريقة نقل Node.js البيانات. التدفقات في Node.js قابلة للقراءة/قابلة للكتابة ، وتستخدم كل من وحدات نظام HTTP ونظام الملفات تدفقات. في نظام الملفات ، عند استخدام التدفقات لقراءة الملفات ، قد لا تتم قراءة ملف كبير في وقت واحد ، ولكن سيتم قراءته عدة مرات. عند القراءة ، سوف يستجيب لأحداث البيانات. يمكنك العمل على بيانات القراءة قبل قراءة الملف. وبالمثل ، عند الكتابة إلى دفق ، لا تتم كتابة ملفات كبيرة في وقت واحد ، تمامًا مثل القراءة. طريقة نقل البيانات هذه فعالة للغاية ، خاصة بالنسبة للملفات الكبيرة. يعد استخدام التدفقات أسرع بكثير من انتظار قراءة جميع الملفات الكبيرة قبل تشغيل الملفات.
خط أنابيب
إذا كنت ترغب في الحصول على تحكم كامل عند القراءة وكتابة التدفقات ، فيمكنك استخدام أحداث البيانات. ولكن بالنسبة للنسخ المتماثل للملفات البسيطة ، يمكن قراءة التدفقات وكتابة التدفقات نقل البيانات من خلال خطوط الأنابيب.
التطبيق العملي:
نسخة الكود كما يلي:
var fs = require ('fs') ،
STAT = fs.stat ؛
/*
* انسخ جميع الملفات في الدليل بما في ذلك الدليل الفرعي
* دليل param {string} الذي يجب نسخه
* param {string} نسخ إلى الدليل المحدد
*/
var copy = function (src ، dst) {
// اقرأ جميع الملفات/الدلائل في الدليل
fs.readdir (SRC ، الدالة (err ، المسارات) {
إذا (خطأ) {
رمي الخطأ
}
paths.foreach (وظيفة (مسار) {
var _src = src + '/' + مسار ،
_DST = DST + '/' + مسار ،
قابلة للقراءة ، يمكن كتابتها ؛
STAT (_SRC ، Function (ERR ، ST) {
إذا (خطأ) {
رمي الخطأ
}
// حدد ما إذا كان ملفًا
if (st.isfile ()) {
// إنشاء دفق قراءة
قابلة للقراءة = fs.createadStream (_SRC) ؛
// إنشاء دفق الكتابة
قابل للكتابة = fs.createwRiteStream (_dst) ؛
// نقل تدفقات الأنابيب
قابلة للقراءة. الأنابيب (قابلة للكتابة) ؛
}
// إذا كان دليلًا ، فاتصل بنفسه بشكل متكرر
وإلا إذا (St.Isdirectory ()) {
موجود (_src ، _dst ، نسخة) ؛
}
}) ؛
}) ؛
}) ؛
} ؛
// قبل نسخ الدليل ، تحتاج إلى تحديد ما إذا كان الدليل موجودًا. إذا لم يكن موجودًا ، فأنت بحاجة إلى إنشاء دليل أولاً.
var موجود = دالة (SRC ، DST ، رد الاتصال) {
fs.exists (DST ، وظيفة (موجودة) {
// موجود بالفعل
إذا (موجود) {
رد الاتصال (SRC ، DST) ؛
}
// غير موجود
آخر{
fs.mkdir (dst ، function () {
رد الاتصال (SRC ، DST) ؛
}) ؛
}
}) ؛
} ؛
// انسخ الدليل
موجود ('./src' ، './build' ، نسخة) ؛