javascript - كتابة الملفات في Node.js
fs (6)
لقد كنت أحاول العثور على طريقة للكتابة إلى ملف عند استخدام Node.js ، ولكن دون أي نجاح. كيف أقوم بذلك؟
اعجبني فهرس ./articles/file-system .
عملت معي.
راجع أيضًا كيف أكتب الملفات في node.js؟ .
fs = require('fs');
fs.writeFile('helloworld.txt', 'Hello World!', function (err) {
if (err)
return console.log(err);
console.log('Wrote Hello World in file helloworld.txt, just check it');
});
محتويات helloworld.txt:
Hello World!
تحديث:
كما هو الحال في عقدة لينكس اكتب في الدليل الحالي ، يبدو في بعض الآخرين لا ، لذلك أقوم بإضافة هذا التعليق فقط في حالة:
باستخدام هذا ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH);
ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH);
للحصول على مكان كتابة الملف.
توجد حاليًا ثلاث طرق لكتابة ملف:
fs.write(fd, buffer, offset, length, position, callback
)تحتاج إلى انتظار رد الاتصال للتأكد من كتابة المخزن المؤقت على القرص. انها ليست مخزنة.
fs.writeFile(filename, data, [encoding], callback)
يجب تخزين جميع البيانات في نفس الوقت ؛ لا يمكنك تنفيذ عمليات الكتابة التسلسلية.
fs.createWriteStream(path, [options]
)ينشئ
WriteStream
، وهو أمر مريح لأنك لست بحاجة إلى انتظار معاودة الاتصال. ولكن مرة أخرى ، لا يتم تخزينها مؤقتًا.
A WriteStream
، كما يقول الاسم ، هو دفق. دفق حسب التعريف هو "مخزن مؤقت" يحتوي على بيانات تتحرك في اتجاه واحد (المصدر ► الوجهة). لكن تيار قابل للكتابة ليس بالضرورة "مخزناً". الدفق هو "مخزَّن" عند كتابة n
مرة ، وفي وقت n+1
، يرسل الدفق المخزن المؤقت إلى kernel (لأنه ممتلئ ويحتاج إلى مسح).
بمعنى آخر: "المخزن المؤقت" هو الكائن. سواء كانت "مخزّنة" أم لا هي خاصية لذلك الكائن.
إذا نظرت إلى الرمز ، يرث WriteStream
من كائن Stream
للكتابة. إذا انتبهت ، سترى كيفية مسح المحتوى ؛ ليس لديهم أي نظام للتخزين المؤقت.
إذا قمت بكتابة سلسلة ، يتم تحويلها إلى مخزن مؤقت ، ثم يتم إرسالها إلى الطبقة الأصلية وكتابتها على القرص. عند كتابة السلاسل ، فإنهم لا يملؤون أي مخزن مؤقت. لذلك ، إذا فعلت:
write("a")
write("b")
write("c")
أنتم تفعلون:
fs.write(new Buffer("a"))
fs.write(new Buffer("b"))
fs.write(new Buffer("c"))
هذه ثلاث مكالمات لطبقة I / O. على الرغم من أنك تستخدم "المخازن المؤقتة" ، إلا أنه لا يتم تخزين البيانات مؤقتًا. دفق fs.write(new Buffer ("abc"))
القيام به: fs.write(new Buffer ("abc"))
، استدعاء واحد إلى طبقة الإدخال / الإخراج.
اعتبارا من الآن ، في Node.js v0.12 (الإصدار المستقر أعلن 02/06/2015) يدعم الآن وظيفتين: cork()
uncork()
. يبدو أن هذه الوظائف تسمح لك أخيرًا بتخزين / مسح مكالمات الكتابة.
على سبيل المثال ، في Java توجد بعض الفئات التي توفر تدفقات مخزنة ( BufferedOutputStream
، BufferedWriter
...). إذا كتبت ثلاثة بايت ، سيتم تخزين هذه البايتات في المخزن المؤقت (الذاكرة) بدلاً من إجراء استدعاء I / O فقط من أجل ثلاثة بايت. عندما يكون المخزن المؤقت ممتلئًا ، يتم مسح المحتوى وحفظه على القرص. هذا يحسن الأداء.
أنا لا أكتشف أي شيء ، فقط تذكر كيف يجب أن يتم الوصول إلى القرص.
هنا نستخدم w + لقراءة / كتابة كلا الإجراءين وإذا لم يتم العثور على مسار الملف سيتم إنشاؤه تلقائيا.
fs.open(path, 'w+', function(err, data) {
if (err) {
console.log("ERROR !! " + err);
} else {
fs.write(data, 'content', 0, 'content length', null, function(err) {
if (err)
console.log("ERROR !! " + err);
fs.close(data, function() {
console.log('written success');
})
});
}
});
المحتوى يعني ما عليك الكتابة إلى الملف وطوله "content.length".
هناك الكثير من التفاصيل في واجهة برمجة التطبيقات لنظام الملفات . الطريقة الأكثر شيوعًا (حسب علمي) هي:
var fs = require('fs');
fs.writeFile("/tmp/test", "Hey there!", function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
يمكنك بالطبع جعلها أكثر تقدمًا. عدم حظر أو كتابة أجزاء أو أجزاء ، وعدم كتابة الملف بأكمله مرة واحدة:
var fs = require('fs');
var stream = fs.createWriteStream("my_file.txt");
stream.once('open', function(fd) {
stream.write("My first row\n");
stream.write("My second row\n");
stream.end();
});
var fs = require('fs');
fs.writeFile(path + "\\message.txt", "Hello", function(err){
if (err) throw err;
console.log("success");
});
على سبيل المثال: قراءة الملف والكتابة إلى ملف آخر:
var fs = require('fs');
var path = process.cwd();
fs.readFile(path+"\\from.txt",function(err,data)
{
if(err)
console.log(err)
else
{
fs.writeFile(path+"\\to.text",function(erro){
if(erro)
console.log("error : "+erro);
else
console.log("success");
});
}
});