जवाबों:
फ़ाइल सिस्टम एपीआई में बहुत सारे विवरण हैं । सबसे आम तरीका है:
const fs = require('fs');
fs.writeFile("/tmp/test", "Hey there!", function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
// Or
fs.writeFileSync('/tmp/test-sync', 'Hey there!');
/home/...
। आम तौर पर वह निर्देशिका 755 रूट: व्हील (या जो भी) है। यदि नोड फ़ाइल को जेन के रूप में लिखना चाहता है, तो इसे लिखना आसान हो जाएगा /home/jane/test.txt
। /home
755 से अधिक अनुमेय कुछ को बदलना एक बहुत बड़ी गलती है।
/home
निर्देशिका पर फ़ाइल सहेजना चाहता था, इसलिए मैंने इसे चोदने का सुझाव दिया। मुझे पता है कि यह एक सुरक्षा मुद्दा उत्पन्न कर सकता है। लेकिन ठीक है, अगर उपयोगकर्ता वहाँ बचाना चाहता है, तो इसका समाधान है। पुनश्च: आपने जो कहा, उससे मैं सहमत हूं: (:
वर्तमान में फ़ाइल लिखने के तीन तरीके हैं:
fs.write(fd, buffer, offset, length, position, callback
)
आपको यह सुनिश्चित करने के लिए कॉलबैक की प्रतीक्षा करने की आवश्यकता है कि बफर डिस्क पर लिखा गया है। यह बफर नहीं है।
fs.writeFile(filename, data, [encoding], callback)
सभी डेटा को एक ही समय में संग्रहीत किया जाना चाहिए; आप क्रमिक लेखन नहीं कर सकते।
fs.createWriteStream(path, [options]
)
एक बनाता है WriteStream
, जो सुविधाजनक है क्योंकि आपको कॉलबैक के लिए प्रतीक्षा करने की आवश्यकता नहीं है। लेकिन फिर, यह शौकीन नहीं है।
ए WriteStream
, जैसा कि नाम कहता है, एक धारा है। परिभाषा द्वारा एक धारा "बफर" है जिसमें एक दिशा (स्रोत ► गंतव्य) में जाने वाला डेटा होता है। लेकिन एक लेखनीय धारा जरूरी नहीं कि "बफर" हो। जब आप n
समय लिखते हैं, तो एक स्ट्रीम "बफर" होती है , और समय के साथ n+1
, धारा बफर को कर्नेल को भेजती है (क्योंकि यह पूर्ण है और इसे फ्लश करने की आवश्यकता है)।
दूसरे शब्दों में: "ए बफर" ऑब्जेक्ट है। चाहे वह "बफर्ड" हो या न हो, वह उस वस्तु का एक गुण है।
यदि आप कोड को देखते हैं, तो 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"))
I / O लेयर को एक कॉल।
अब के रूप में, Node.js v0.12 (स्थिर संस्करण की घोषणा 02/06/2015) अब दो कार्यों का समर्थन करता है:
cork()
और
uncork()
। ऐसा लगता है कि ये फ़ंक्शन आपको लिखने की कॉल को बफर / फ्लश करने की अनुमति देंगे।
उदाहरण के लिए, जावा में कुछ वर्ग हैं जो बफर स्ट्रीम ( BufferedOutputStream
, BufferedWriter
...) प्रदान करते हैं । यदि आप तीन बाइट्स लिखते हैं, तो ये बाइट्स केवल तीन बाइट्स के लिए I / O कॉल करने के बजाय बफर (मेमोरी) में स्टोर हो जाएंगे। जब बफ़र पूरा हो जाता है तो सामग्री को फ्लश किया जाता है और डिस्क में सहेजा जाता है। इससे प्रदर्शन में सुधार होता है।
मुझे कुछ भी पता नहीं चल रहा है, बस याद है कि डिस्क का उपयोग कैसे किया जाना चाहिए।
cork()
और uncork()
हम में से जो पूर्व रिलीज 0.11 नोड बाहर की कोशिश करना चाहते हैं के लिए एक उदाहरण प्रदान कर सकता है?
npm
बफर लेखन को लागू करने पर उत्पादन गुणवत्ता पुस्तकालय हैं ?
आप बेशक इसे थोड़ा और उन्नत बना सकते हैं। गैर-अवरुद्ध, बिट्स और टुकड़ों को लिखना, एक बार में पूरी फ़ाइल नहीं लिखना:
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();
});
तुल्यकालिक लिखें
fs.writeFileSync (फ़ाइल, डेटा [, विकल्प])
fs = require('fs');
fs.writeFileSync("synchronous.txt", "synchronous write!")
अतुल्यकालिक लिखें
fs.writeFile (फ़ाइल, डेटा [, विकल्प], कॉलबैक)
fs = require('fs');
fs.writeFile('asynchronous.txt', 'asynchronous write!', (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
कहाँ पे
file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
data <string> | <Buffer> | <Uint8Array>
options <Object> | <string>
callback <Function>
आधिकारिक फाइल सिस्टम (fs) डॉक्स को पढ़ने के लायक ।
var path = 'public/uploads/file.txt',
buffer = new Buffer("some content\n");
fs.open(path, 'w', function(err, fd) {
if (err) {
throw 'error opening 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('file written');
})
});
});
fs.write()
) पर सेट है, तो यह उदाहरण केवल तभी काम करता है जब सब कुछ एक सिंगल कॉल में लिखे जाने के लिए पर्याप्त हो।
मुझे ./articles/file-system का सूचकांक पसंद आया ।
इसने मेरे लिए काम किया।
यह भी देखें कि मैं नोड.जेएस में फाइलें कैसे लिखूं? ।
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);
उस जगह का उपयोग करने के लिए जहां फ़ाइल लिखी गई है।
प्रदान किए गए उत्तर दिनांकित हैं और ऐसा करने का एक नया तरीका है:
const fsPromises = require('fs').promises
await fsPromises.writeFile('/path/to/file.txt', 'data to write')
(node:23759) ExperimentalWarning: The fs.promises API is experimental
v10.15.0
मुझे पता है कि "लिखना" के बारे में पूछा गया प्रश्न लेकिन कुछ और अर्थों में "परिशिष्ट" कुछ मामलों में उपयोगी हो सकता है क्योंकि एक फाइल में पाठ जोड़ने के लिए लूप में उपयोग करना आसान है (चाहे फ़ाइल मौजूद है या नहीं)। यदि आप लाइनों को जोड़ना चाहते हैं तो "\ n" का उपयोग करें:
var fs = require('fs');
for (var i=0; i<10; i++){
fs.appendFileSync("junk.csv", "Line:"+i+"\n");
}
const
है var
, इसलिए मैं const fs = require('fs');
अवांछित साइड इफेक्ट्स से बचने के लिए , अर्थात , यदि आप कुछ बड़े कोड बेस के साथ काम कर रहे हैं, विशेष रूप से उपयोग करने की सिफारिश करेंगे ।
ठीक है, यह काफी सरल है क्योंकि नोड ने इसके लिए अंतर्निहित कार्यक्षमता बनाई है, इसे कहा जाता है fs
जो फ़ाइल सिस्टम और मूल रूप से, नोड्स फ़ाइल मोड मॉड्यूल के लिए खड़ा है ...
तो पहले इसे अपने server.js फ़ाइल में इस तरह की आवश्यकता होती है :
var fs = require('fs');
fs
फ़ाइल लिखने के लिए कुछ तरीके हैं, लेकिन मेरा पसंदीदा तरीका उपयोग कर रहा है appendFile
, यह फ़ाइल में सामान को जोड़ देगा और यदि फ़ाइल मौजूद नहीं है, तो एक बना देगा, कोड नीचे जैसा हो सकता है:
fs.appendFile('myFile.txt', 'Hi Ali!', function (err) {
if (err) throw err;
console.log('Thanks, It\'s saved to the file!');
});
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");
});
}
});
writeFile
क्या जुड़ता है ?
आप fs (फाइल सिस्टम) मॉड्यूल का उपयोग कर एक फ़ाइल को लिख सकते हैं ।
यहाँ एक उदाहरण है कि आप इसे कैसे कर सकते हैं:
const fs = require('fs');
const writeToFile = (fileName, callback) => {
fs.open(fileName, 'wx', (error, fileDescriptor) => {
if (!error && fileDescriptor) {
// Do something with the file here ...
fs.writeFile(fileDescriptor, newData, (error) => {
if (!error) {
fs.close(fileDescriptor, (error) => {
if (!error) {
callback(false);
} else {
callback('Error closing the file');
}
});
} else {
callback('Error writing to new file');
}
});
} else {
callback('Could not create new file, it may already exists');
}
});
};
तुम भी उपयोग करके इस कॉलबैक-अंदर-कॉलबैक कोड संरचना से छुटकारा पाने के लिए चाहते हो सकता वादे और async
/ await
बयान। यह अतुल्यकालिक कोड संरचना को बहुत अधिक सपाट बना देगा। ऐसा करने के लिए एक उपयोगी उपयोग है। Promisify (मूल) फ़ंक्शन का उपयोग किया जा सकता है। यह हमें कॉलबैक से वादों पर स्विच करने की अनुमति देता है। fs
नीचे दिए गए कार्यों के साथ उदाहरण पर एक नज़र डालें:
// Dependencies.
const util = require('util');
const fs = require('fs');
// Promisify "error-back" functions.
const fsOpen = util.promisify(fs.open);
const fsWrite = util.promisify(fs.writeFile);
const fsClose = util.promisify(fs.close);
// Now we may create 'async' function with 'await's.
async function doSomethingWithFile(fileName) {
const fileDescriptor = await fsOpen(fileName, 'wx');
// Do something with the file here...
await fsWrite(fileDescriptor, newData);
await fsClose(fileDescriptor);
}
यहां हम दोनों क्रियाओं को पढ़ने / लिखने के लिए 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'।
यहाँ स्थानीय से फ़ाइल csv पढ़ने के लिए और स्थानीय करने के लिए सीएसवी फ़ाइल लिखने के लिए नमूना है।
var csvjson = require('csvjson'),
fs = require('fs'),
mongodb = require('mongodb'),
MongoClient = mongodb.MongoClient,
mongoDSN = 'mongodb://localhost:27017/test',
collection;
function uploadcsvModule(){
var data = fs.readFileSync( '/home/limitless/Downloads/orders_sample.csv', { encoding : 'utf8'});
var importOptions = {
delimiter : ',', // optional
quote : '"' // optional
},ExportOptions = {
delimiter : ",",
wrap : false
}
var myobj = csvjson.toSchemaObject(data, importOptions)
var exportArr = [], importArr = [];
myobj.forEach(d=>{
if(d.orderId==undefined || d.orderId=='') {
exportArr.push(d)
} else {
importArr.push(d)
}
})
var csv = csvjson.toCSV(exportArr, ExportOptions);
MongoClient.connect(mongoDSN, function(error, db) {
collection = db.collection("orders")
collection.insertMany(importArr, function(err,result){
fs.writeFile('/home/limitless/Downloads/orders_sample1.csv', csv, { encoding : 'utf8'});
db.close();
});
})
}
uploadcsvModule()
fs.createWriteStream(path[,options])
options
start
फ़ाइल की शुरुआत में कुछ स्थिति में डेटा लिखने की अनुमति देने का विकल्प भी शामिल हो सकता है । किसी फ़ाइल को बदलने के बजाय इसे डिफ़ॉल्ट मोडflags
केr+
बजाय मोड की आवश्यकता हो सकती हैw
। एन्कोडिंग बफ़र द्वारा स्वीकृत लोगों में से कोई भी हो सकता है ।यदि
autoClose
सत्य (डिफ़ॉल्ट व्यवहार) पर सेट है'error'
या'finish'
फ़ाइल डिस्क्रिप्टर स्वचालित रूप से बंद हो जाएगा। यदिautoClose
गलत है, तो फ़ाइल डिस्क्रिप्टर बंद नहीं होगा, भले ही कोई त्रुटि हो। यह अनुप्रयोग की जिम्मेदारी है कि वह इसे बंद कर दे और सुनिश्चित करे कि कोई फाइल डिस्क्रिप्टर लीक न हो।ReadStream की तरह , यदि
fd
निर्दिष्ट किया गया है, तो WriteStreampath
तर्क की अनदेखी करेगा और निर्दिष्ट फ़ाइल डिस्क्रिप्टर का उपयोग करेगा। इसका मतलब है कि कोई भी'open'
घटना उत्सर्जित नहीं होगी।fd
अवरुद्ध होना चाहिए; गैर-अवरोधकfd
s को net पर जाना चाहिए ।यदि
options
एक स्ट्रिंग है, तो यह एन्कोडिंग को निर्दिष्ट करता है।
इसके बाद, इस लंबे लेख को पढ़ना। आपको समझना चाहिए कि यह कैसे काम करता है। तो, यहाँ का एक उदाहरण है createWriteStream()
।
/* The fs.createWriteStream() returns an (WritableStream {aka} internal.Writeable) and we want the encoding as 'utf'-8 */
/* The WriteableStream has the method write() */
fs.createWriteStream('out.txt', 'utf-8')
.write('hello world');
आप पुस्तकालय का उपयोग कर सकते हैं easy-file-manager
npm से पहले स्थापित करें
npm install easy-file-manager
फ़ाइलों को अपलोड करने और हटाने के लिए नमूना
var filemanager = require('easy-file-manager')
var path = "/public"
var filename = "test.jpg"
var data; // buffered image
filemanager.upload(path,filename,data,function(err){
if (err) console.log(err);
});
filemanager.remove(path,"aa,filename,function(isSuccess){
if (err) console.log(err);
});
This modules is created to save and remove files.
। उत्तर नहीं।
आप निम्नलिखित कोड उदाहरण द्वारा एक फ़ाइल में लिख सकते हैं:
var data = [{ 'test': '123', 'test2': 'Lorem Ipsem ' }];
fs.open(datapath + '/data/topplayers.json', 'wx', function (error, fileDescriptor) {
if (!error && fileDescriptor) {
var stringData = JSON.stringify(data);
fs.writeFile(fileDescriptor, stringData, function (error) {
if (!error) {
fs.close(fileDescriptor, function (error) {
if (!error) {
callback(false);
} else {
callback('Error in close file');
}
});
} else {
callback('Error in writing file.');
}
});
}
});
writeFile
कई साल पहले ही उत्तर के रूप में पहले ही दिया जा चुका था। यह उत्तर क्या जोड़ता है?
{ [Error: EACCES, open '/home/test.txt'] errno: 3, code: 'EACCES', path: '/home/test.txt' }
मैं इस स्क्रिप्ट को कैसे संशोधित कर सकता हूं ताकि यह बाहर काम करेगा/tmp
?