Node.js में फाइलें लिखना


1642

मैं Node.js का उपयोग करते समय फ़ाइल में लिखने का एक तरीका खोजने की कोशिश कर रहा हूं, लेकिन कोई सफलता नहीं है। मैं उसे कैसे कर सकता हूँ?

जवाबों:


2461

फ़ाइल सिस्टम एपीआई में बहुत सारे विवरण हैं । सबसे आम तरीका है:

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!');

25
मैंने नोड का उपयोग करके इस स्क्रिप्ट का परीक्षण किया है, और मैंने फ़ाइल पथ को "/ home /" में बदलने की कोशिश की है, लेकिन मुझे निम्नलिखित त्रुटि मिली: { [Error: EACCES, open '/home/test.txt'] errno: 3, code: 'EACCES', path: '/home/test.txt' } मैं इस स्क्रिप्ट को कैसे संशोधित कर सकता हूं ताकि यह बाहर काम करेगा /tmp?
एंडरसन ग्रीन

129
यह भी ध्यान दें कि आप समान रूप से एक ही चीज़ को पूरा करने के लिए fs.writeFileSync (...) का उपयोग कर सकते हैं।
डेविड इरविन

7
शायद यह थोड़ा पुराना है, लेकिन @AndersonGreen, आपको वर्तमान नोड प्रक्रिया के मालिक (आपका उपयोगकर्ता नाम कठिन) के लिए R / W की अनुमति देने के लिए नोड को रूट या chmod / होम के रूप में ठीक से चलाने की आवश्यकता है ताकि आप फ़ाइल लिख सकें
Denys Vitali

38
दरअसल, @DenysVitali, समस्या यह है कि jane को किसी भी फाइल को लिखने में सक्षम नहीं होना चाहिए /home/...। आम तौर पर वह निर्देशिका 755 रूट: व्हील (या जो भी) है। यदि नोड फ़ाइल को जेन के रूप में लिखना चाहता है, तो इसे लिखना आसान हो जाएगा /home/jane/test.txt/home755 से अधिक अनुमेय कुछ को बदलना एक बहुत बड़ी गलती है।
jane चाप

7
@JaneAvriette खैर, चूंकि वह /homeनिर्देशिका पर फ़ाइल सहेजना चाहता था, इसलिए मैंने इसे चोदने का सुझाव दिया। मुझे पता है कि यह एक सुरक्षा मुद्दा उत्पन्न कर सकता है। लेकिन ठीक है, अगर उपयोगकर्ता वहाँ बचाना चाहता है, तो इसका समाधान है। पुनश्च: आपने जो कहा, उससे मैं सहमत हूं: (:
डाइसिटी विटाली

535

वर्तमान में फ़ाइल लिखने के तीन तरीके हैं:

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

    आपको यह सुनिश्चित करने के लिए कॉलबैक की प्रतीक्षा करने की आवश्यकता है कि बफर डिस्क पर लिखा गया है। यह बफर नहीं है।

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

    सभी डेटा को एक ही समय में संग्रहीत किया जाना चाहिए; आप क्रमिक लेखन नहीं कर सकते।

  3. 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 कॉल करने के बजाय बफर (मेमोरी) में स्टोर हो जाएंगे। जब बफ़र पूरा हो जाता है तो सामग्री को फ्लश किया जाता है और डिस्क में सहेजा जाता है। इससे प्रदर्शन में सुधार होता है।

मुझे कुछ भी पता नहीं चल रहा है, बस याद है कि डिस्क का उपयोग कैसे किया जाना चाहिए।


5
+1 - अच्छी व्याख्या। लिखने की धारा के लिए, डॉक्स को ध्यान से पढ़ना महत्वपूर्ण है। यदि गलत या क्लोजिंग देता है, तो राइटर को कॉल करना महत्वपूर्ण है। '' ड्रेन ', फंक्शन () {}) या मैं उन लाइन्स को मिस करता हूं जो प्रोसेस खत्म होने पर ड्रेन नहीं हुई थीं।
१18:१ry को १18

4
कोई भी मौका आप कैसे उपयोग करने के लिए cork()और uncork()हम में से जो पूर्व रिलीज 0.11 नोड बाहर की कोशिश करना चाहते हैं के लिए एक उदाहरण प्रदान कर सकता है?
प्रोफेसेर्मेटिंगटन

अब तक, नोड v0.12 स्थिर है।
अगस्त

GitHub के कोड के विश्लेषण के अनुसार, fs.writeFile आपके द्वारा बताए गए कार्यों में सबसे लोकप्रिय है। यहाँ fs.writeFile का उपयोग करने के लिए वास्तविक दुनिया उदाहरण हैं
drorw

क्या npmबफर लेखन को लागू करने पर उत्पादन गुणवत्ता पुस्तकालय हैं ?
नोप्पेकोपोप

265

आप बेशक इसे थोड़ा और उन्नत बना सकते हैं। गैर-अवरुद्ध, बिट्स और टुकड़ों को लिखना, एक बार में पूरी फ़ाइल नहीं लिखना:

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();
});

17
स्ट्रीम के लिए कॉलबैक में 'fd' वेरिएबल क्या है?
स्कॉट टेस्लर

1
@ScottDavidTesler फ़ाइल डिस्क्रिप्टर ताकि आप इसके साथ काम करने के बाद स्ट्रीम को बंद कर सकें।
एलेक्सी कमेंस्की

3
मैं स्ट्रीम कब बंद करूं? यह गैर-अवरुद्ध क्यों है? बस जिज्ञासु, मैं एक लॉग फ़ाइल में लिखने की कोशिश कर रहा हूँ।
मेटागुरु

1
जब धारा प्रवाहित होती है तो मुझे यकीन नहीं होता। मेरा अनुमान है कि मांग पर धारा बहने की संभावना है।
फ्रेड्रिक एंडर्सन

1
@ जॉली आपको इसके लिए इंतजार करना पड़ेगा।
फ्रेड्रिक एंडर्सन

60

तुल्यकालिक लिखें

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) डॉक्स को पढ़ने के लायक ।


52
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');
        })
    });
});

2
यह दर्शाता है कि निचले स्तर के fs परिचालनों का उपयोग करके फ़ाइल कैसे लिखी जाती है। उदाहरण के लिए, आप गारंटी दे सकते हैं कि फ़ाइल ने डिस्क पर लिखना समाप्त कर दिया है और फ़ाइल विवरण जारी किया है।
सीन ग्लोवर

चूँकि इस उदाहरण में ऑफ़सेट अगर '0' (= तीसरे पैरामीटर fs.write()) पर सेट है, तो यह उदाहरण केवल तभी काम करता है जब सब कुछ एक सिंगल कॉल में लिखे जाने के लिए पर्याप्त हो।
मैफ्रेड

30

मुझे ./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);उस जगह का उपयोग करने के लिए जहां फ़ाइल लिखी गई है।


फ़ाइल helloworld.txt फ़ाइल कहाँ से खोजें? मैं इसे किसी भी फ़ोल्डर में नहीं ढूँढ सकता ... धन्यवाद।
काई फ़ेंग च्यू

फ़ोल्डर में जो आप स्क्रिप्ट चलाते हैं
Sérgio

यह अजीब है ... मैं अभी इसे कहीं भी नहीं ढूँढ सकता। क्या इसे छिपाया जाएगा? फिर से धन्यवाद ~
काई फेंग ने

6
मैंने अभी पाया। इस ROOT_APP_PATH = fs.realpathSync ('।') का उपयोग करना ; कंसोल.लॉग ( ROOT_APP_PATH ); मेरी फ़ाइल प्राप्त करने के लिए धन्यवाद।
काई फ़ेंग च्यू

@ Sérgio: क्या हमें राइटफाइल को बंद करने की आवश्यकता है? मैं एक और प्रक्रिया को बुला रहा हूं और मुझे एक त्रुटि संदेश प्राप्त हो रहा है फ़ाइल के बारे में कुछ अन्य प्रक्रिया द्वारा उपयोग किया जाता है।
आमिर

23

प्रदान किए गए उत्तर दिनांकित हैं और ऐसा करने का एक नया तरीका है:

const fsPromises = require('fs').promises
await fsPromises.writeFile('/path/to/file.txt', 'data to write')

अधिक जानकारी के लिए यहां दस्तावेज़ देखें


1
(node:23759) ExperimentalWarning: The fs.promises API is experimental
जगप।

@ जगरप: क्या आप नोड के नवीनतम संस्करण का उपयोग कर रहे हैं?
ट्रेविडेव

नोडv10.15.0
जगुआर

7
फ़ंक्शन को संलग्न करना async होना है या यह काम नहीं करेगा।
ज़िमानो

1
@wintercounter यह बहुत प्यारा है!
ज़िमानो

18

मुझे पता है कि "लिखना" के बारे में पूछा गया प्रश्न लेकिन कुछ और अर्थों में "परिशिष्ट" कुछ मामलों में उपयोगी हो सकता है क्योंकि एक फाइल में पाठ जोड़ने के लिए लूप में उपयोग करना आसान है (चाहे फ़ाइल मौजूद है या नहीं)। यदि आप लाइनों को जोड़ना चाहते हैं तो "\ 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');अवांछित साइड इफेक्ट्स से बचने के लिए , अर्थात , यदि आप कुछ बड़े कोड बेस के साथ काम कर रहे हैं, विशेष रूप से उपयोग करने की सिफारिश करेंगे ।
मैनफ्रेड

10

ठीक है, यह काफी सरल है क्योंकि नोड ने इसके लिए अंतर्निहित कार्यक्षमता बनाई है, इसे कहा जाता है 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!');
});

3
स्ट्रिंग में एकल उद्धरण से बच जाना चाहिए।
टैमर

8
 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");
                            });
                        }
                });

जहाँ आप "to.text" में डेटा लिख ​​रहे हैं ??
रवि शंकर रेड्डी

इस उत्तर के बारे में पहले से मौजूद कई उत्तरों से writeFileक्या जुड़ता है ?
डैन डस्केल्सस्कु

7

आप 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);
}

1
ये स्निपेट्स और कोड के टुकड़े क्यों नहीं हैं? वे कभी भी किसी ब्राउज़र में नहीं चल पाएंगे।
ज़िमानो

@Zimano जैसा कि मैं समझता हूं कि यह सवाल नोड्स के बारे में था, इसलिए ब्राउज़र में चलने में सक्षम होने की आवश्यकता नहीं है।
मैनफ्रेड

1
@ मैनफ़्रेड सटीक! मुझे लगता है कि आप गलत समझे कि मैं क्या कहना चाह रहा था; स्निपेट होने का कोई मतलब नहीं है क्योंकि यह नोडज है!
ज़िमानो

4

यहां हम दोनों क्रियाओं को पढ़ने / लिखने के लिए 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'।


2

यहाँ स्थानीय से फ़ाइल 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()

1
यह सभी प्रकार की जटिलताओं (MongoClient, JSON आदि) का परिचय देता है जो प्रश्न से संबंधित नहीं हैं।
डैन डसेलस्क्यू

2

fs.createWriteStream(path[,options])

optionsstartफ़ाइल की शुरुआत में कुछ स्थिति में डेटा लिखने की अनुमति देने का विकल्प भी शामिल हो सकता है । किसी फ़ाइल को बदलने के बजाय इसे डिफ़ॉल्ट मोड flagsके r+बजाय मोड की आवश्यकता हो सकती है w। एन्कोडिंग बफ़र द्वारा स्वीकृत लोगों में से कोई भी हो सकता है ।

यदि autoCloseसत्य (डिफ़ॉल्ट व्यवहार) पर सेट है 'error'या 'finish'फ़ाइल डिस्क्रिप्टर स्वचालित रूप से बंद हो जाएगा। यदि autoCloseगलत है, तो फ़ाइल डिस्क्रिप्टर बंद नहीं होगा, भले ही कोई त्रुटि हो। यह अनुप्रयोग की जिम्मेदारी है कि वह इसे बंद कर दे और सुनिश्चित करे कि कोई फाइल डिस्क्रिप्टर लीक न हो।

ReadStream की तरह , यदि fdनिर्दिष्ट किया गया है, तो WriteStreampath तर्क की अनदेखी करेगा और निर्दिष्ट फ़ाइल डिस्क्रिप्टर का उपयोग करेगा। इसका मतलब है कि कोई भी 'open'घटना उत्सर्जित नहीं होगी। fdअवरुद्ध होना चाहिए; गैर-अवरोधक fds को 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');

createWriteStreamइस से पहले ही कई उत्तर वर्षों में उल्लेख किया गया था ।
डैन डस्केल्सस्कु

0

आप पुस्तकालय का उपयोग कर सकते हैं 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);
});

2
This modules is created to save and remove files.। उत्तर नहीं।
ग्रीन

-1

आप निम्नलिखित कोड उदाहरण द्वारा एक फ़ाइल में लिख सकते हैं:

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.');
      }
    });
  }
});

1
writeFileकई साल पहले ही उत्तर के रूप में पहले ही दिया जा चुका था। यह उत्तर क्या जोड़ता है?
डैनस्केलस्कु

इसके अलावा आप फ़ाइल क्यों खोलते हैं? क्या फाइल लिखने के बारे में जवाब नहीं होना चाहिए?
मिशाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.