اذهب إلى المحتوى

السؤال

نشر

لدي خادم ويب node.js وأرغب بالتعامل مع الملفات النصية من كتابة وتعديل لبعض البيانات، ومن خلال البحث وجدت ثلاث طرق للتعامل مع الملفات fs.write و fs.writeFile و fs.createWriteStream

ولكن ماهو الفرق بين هذه الطرق الثلاث؟ ومتى يجب علي استخدام كل واحدة منها؟

Recommended Posts

  • 0
نشر

تتضمن الوحدة النمطية fs طريقة writeFile عالية المستوى يمكنها كتابة البيانات إلى الملفات بشكل غير متزامن. هذا يعني ، كما هو الحال مع الكثير من العمليات في Node.js ، أن الإدخال / الإخراج لا يحظر ، ويصدر حدثًا عند انتهاء العملية.

فيما يلي مثال بسيط على رمز كتابة بعض كلمات الأغاني في ملف:

// writefile.js

const fs = require('fs');

let text = 'text textetxtettettt';

fs.writeFile('text.txt', text, (err) => {
    if (err) throw err;

    console.log('text saved!');
});

على عكس أساليب fs.writeFile و fs.writeFileSync عالية المستوى ، يمكنك الاستفادة من المزيد من التحكم عند الكتابة إلى الملفات في Node.js باستخدام طريقة fs.write ذات المستوى المنخفض. تسمح طريقة fs.write بالتحكم الدقيق في الموضع في الملف لبدء الكتابة فيه ، ومخزن مؤقت يمكنك تحديده للكتابة ، بالإضافة إلى أي جزء من المخزن المؤقت تريد كتابته على الملف.

// fs_write.js

const fs = require('fs');

let path = 'text.txt';
let buffer = new Buffer('qdqdqsdqdqsdqsdqdqsdqdqsdqdqd');

fs.open(path, 'w', function(err, fd) {
    if (err) {
        throw 'could not open file: ' + err;
    }

    fs.write(fd, buffer, 0, buffer.length, null, function(err) {
        if (err) throw 'error writing file: ' + err;
        fs.close(fd, function() {
            console.log('wrote the file successfully');
        });
    });
});

عند التعامل مع الملفات الكبيرة بشكل خاص ، أو الملفات التي تأتي في أجزاء ، على سبيل المثال من اتصال الشبكة ، فإن استخدام streams هو الأفضل لكتابة الملفات دفعة واحدة 

// write_stream.js

const fs = require('fs');

let writeStream = fs.createWriteStream('secret.txt');

writeStream.write('aef35ghhjdk74hja83ksnfjk888sfsf', 'base64');

writeStream.on('finish', () => {
    console.log('wrote all data to file');
});

writeStream.end();

 

  • 0
نشر

تعتبر write, writefile من الدوال  low-level access أي هي وسيلة سريعة لكتابة بعض المعلومات على ملف و لكن الفرق بين write , writeFile هو أن writeFile تقوم بفتح و كتابة و أغلاق الملف دون الحاجة الى أستعمال أي أمر أخر أما write  فلا تقوم بأغلاق الملف و عليك أغلاقة 

أما بالنسبة لل fs.createWriteStream  بالمقارنة مع السابقات فهي من الدوال الأعلى قدرة على الحفظ بطريقة دقيقة حيث أنها تفتح مجرى stream  ليقوم بتدفق المعلومات من الى الملف بشكل طوابير queues  و بهذه الطريقة فأن هذه الطريقة تتيح لك كتابة ملفات بحجم أكبر و أدق من الدوال السابقة حيث أن write, weiteFile ليسو عمليين حينما تقوم بكتابة ملفات كبيرة الحجم

  • 0
نشر

الفرق الأساسي بين الدوال هو البارامترات التي يتم استخدامها وبالتالي طريقة عمل كل منها:

fs.write(fd, buffer, offset, length, position, callback)

في الدالة fs.write يجب عليك انتظار callback حتى يتم تأكيد كتابة buffer على القرص الصلب.

أما في الدالة fs.writeFile:

fs.writeFile(filename, data, [encoding], callback)

يتم كتابة جميع البيانات دفعة واحدة، ولا يمكنك إجراء عمليات كتابة منفصلة عن بعضها ضمن الملف.

أما في fs.createWriteStream:

fs.createWriteStream(path, [options])

هنا نلاحظ من البارامترات أنه لا يجب أن ننتظر أي callback عند إجراء العملية.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...