नोड.जेएस फ़ाइल को हटा दें


जवाबों:


804

मुझे लगता है कि आप उपयोग करना चाहते हैं fs.unlink

अधिक जानकारी यहाँ पर fsमिल सकती है


137
मेरा मानना ​​है कि यह POSIX मानक से आता है। लेकिन आपको लगता है कि वे एक deleteउपनाम जोड़ सकते हैं !
निक

11
@ निक या एक rmFileउपनाम
PixnBits

9
@PixnBits या एक rmउपनाम अगर उनके पास rmdirतरीके हैं
रॉबिन

8
उल्का उपयोगकर्ता के लिए, आप उपयोग करना चाह सकते हैंfs.unlinkSync()
Erdal G.

3
मुझे लगता है कि आपको एक संपूर्ण उदाहरण प्रदान करना चाहिए, लिंक बदल सकते हैं।
वासिलेविच

222

आप fs.unlink(path, callback)एसिंक्रोनस अनलिंक (2) या fs.unlinkSync(path)सिंक्रोनस अनलिंक (2) के लिए कॉल कर सकते हैं । फ़ाइल-पथ
कहाँ pathहै जिसे आप निकालना चाहते हैं

उदाहरण के लिए हम discovery.docxफ़ाइल को हटाना चाहते हैंc:/book डायरेक्टरी । तो मेरा फाइल-पाथ है c:/book/discovery.docx। तो उस फाइल को हटाने के लिए कोड होगा,

var fs = require('fs');
var filePath = 'c:/book/discovery.docx'; 
fs.unlinkSync(filePath);

64

अगर आप डिलीट करने से पहले फाइल को चेक करना चाहते हैं कि वह मौजूद है या नहीं। तो, के बजाय fs.stat या fs.statSync ( सिंक्रोनस ) का उपयोग करें fs.exists। क्योंकि नवीनतम नोड.जेएस प्रलेखन के अनुसार , fs.existsअब पदावनत कर दिया गया है

उदाहरण के लिए:-

 fs.stat('./server/upload/my.csv', function (err, stats) {
   console.log(stats);//here we got all information of file in stats variable

   if (err) {
       return console.error(err);
   }

   fs.unlink('./server/upload/my.csv',function(err){
        if(err) return console.log(err);
        console.log('file deleted successfully');
   });  
});

क्या होगा अगर मैं जाँचता हूँ कि यह मौजूद है, लेकिन यह एक और प्रक्रिया द्वारा अवरुद्ध है - या, मैं जाँचता हूँ कि यह मौजूद है, और यह ठीक है, लेकिन फिर एक और प्रक्रिया यादृच्छिक रूप से इसे ब्लॉक कर देती है, इससे पहले कि मैं हटा पाऊँ। मैं जाँच के बाद सीधे ब्लॉक कैसे कर सकता हूँ? तब मैं अपने अवरुद्ध के रूप में नष्ट नहीं कर

4
ध्यान दें कि fs.exists () पदावनत है, लेकिन fs.existsSync () नहीं है।
टिम

1
वहाँ एक कारण है कि यह पदावनत किया गया है: यदि आप जाँच करते हैं कि फ़ाइल को हटाने से पहले मौजूद है तो अक्सर आप रेस की स्थिति बनाते हैं। इसके बजाय, आपको केवल कॉल करना चाहिए fs.unlink, और यदि फ़ाइल मौजूद नहीं है, तो आपको ENOENTकॉलबैक में त्रुटि होगी । अनलिंक करने की कोशिश करने से पहले जांच करने की आवश्यकता नहीं है।
ZachB

@ZachB fs.unlinkजब फ़ाइल मौजूद नहीं है तो ऑपरेशन प्रदर्शन को क्यों हटाएं , इसलिए मेरा विचार है कि हटाने से पहले फ़ाइल को चेक करें।
सिरका

यदि आप मौजूद हैं या नहीं, तो जाँच करें कि कई थ्रेड या प्रक्रियाएँ हैं जो उसी फ़ाइल को हटाने या उपयोग करने की कोशिश कर रहे हैं, जिस स्थिति में आपका चेक मौजूद है कि आपके द्वारा मौजूद चेक और समय के बीच फ़ाइल अमान्य हो जाएगी। आप इसे हटाने का प्रयास करते हैं। बस unlinkकॉलबैक में ENOENT त्रुटि कोड की जांच करें । यदि वह त्रुटि हुई, तो फ़ाइल मौजूद नहीं थी। उदाहरण के लिए Searene के उत्तर को देखें।
ZachB

34

मुझे नहीं लगता कि आपको जाँच करनी है कि फ़ाइल मौजूद है या नहीं, fs.unlinkयह आपके लिए जाँच करेगा।

fs.unlink('fileToBeRemoved', function(err) {
    if(err && err.code == 'ENOENT') {
        // file doens't exist
        console.info("File doesn't exist, won't remove it.");
    } else if (err) {
        // other errors, e.g. maybe we don't have enough permission
        console.error("Error occurred while trying to remove file");
    } else {
        console.info(`removed`);
    }
});

हम हमारे नियंत्रक में पिछला छवि नाम कैसे प्राप्त कर सकते हैं?
चौधरी

26

इस उद्देश्य के लिए मैंने एक छोटा सा स्निपेट बनाया है,

var fs = require('fs');
var gutil = require('gulp-util');

fs.exists('./www/index.html', function(exists) {
  if(exists) {
    //Show in green
    console.log(gutil.colors.green('File exists. Deleting now ...'));
    fs.unlink('./www/index.html');
  } else {
    //Show in red
    console.log(gutil.colors.red('File not found, so not deleting.'));
  }
});

4
Async मौजूद है पदावनत नोडज्स.org
api

2
यदि आप के साथ जाँच करने के बाद fs.existsऔर इससे पहले कि आप इसे हटा दें, तो क्या होगा यदि फ़ाइल दूसरों द्वारा हटा दी जाती है fs.unlink? यह हो सकता है।
सेरेन

4
यदि कोई फ़ाइल अनलिंक करने का प्रयास करने से पहले मौजूद है, तो आपको इसकी जाँच नहीं करनी चाहिए। बस कॉल करें unlink, और यदि यह मौजूद नहीं है, तो ENOENTत्रुटि को संभालें । अन्यथा आप एक दौड़ की स्थिति बना सकते हैं।
ZachB

9

स्वीकृत उत्तर के रूप में, fs.unlinkफ़ाइलों को हटाने के लिए उपयोग करें।

लेकिन Node.js प्रलेखन के अनुसार

fs.stat()कॉल करने से पहले फ़ाइल के अस्तित्व की जांच करने के लिए उपयोग करना fs.open(), fs.readFile()या fs.writeFile()अनुशंसित नहीं है। इसके बजाय, उपयोगकर्ता कोड को सीधे फ़ाइल को खोलना / पढ़ना / लिखना चाहिए और फ़ाइल उपलब्ध नहीं होने पर उठाई गई त्रुटि को संभालना चाहिए।

यह जाँचने के लिए कि कोई फाइल बिना किसी हेरफेर के मौजूद है या नहीं fs.access()

जाँच करने के लिए फ़ाइलों को हटाया जा सकता है या नहीं, fs.accessइसके बजाय का उपयोग करें

fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => {
  console.log(err ? 'no access!' : 'can read/write');
});

यह एक अच्छा उत्तर है, जिसमें Node.js संदर्भ है। अधिकांश लोग unlinkसीधे उपयोग करेंगे क्योंकि वे जानते हैं कि उनके पास फ़ाइल को हटाने के अधिकार हैं। लेकिन fs.accessएक अच्छा विकल्प है अगर उन्हें हटाने से पहले जांच करने की आवश्यकता है। लेकिन मुझे लगता है कि अगर उन्हें जांचने की जरूरत है कि क्या कोई फाइल बिना किसी हेरफेर के मौजूद है, तो उन्हें स्वाभाविक रूप से उपयोग करना चाहिए fs.stat, fs.accessमेरी विनम्र राय में एक अलग उद्देश्य है।
vdegenne

कारण यह है कि प्रलेखन अस्तित्व के लिए जाँच के खिलाफ सिफारिश करता है क्योंकि वह जानकारी आपके कॉल के बीच fs.stat / fs.access और वास्तविक ऑपरेशन में बदल सकती है। उदाहरण के लिए फ़ाइल तब मौजूद हो सकती है जब आप fs.access को कॉल करते हैं और फिर fs.unlink को कॉल करने से पहले हटा दिया जाता है, या दो कॉल के बीच अनुमतियाँ बदल सकती हैं। चूंकि आपको उस मामले में fs.unlink के त्रुटि कोड को संभालना है, वैसे भी fs.stat या fs.access को कॉल करने का कोई मतलब नहीं है।
Jannis Froese

6

यहाँ मेरे कोड के नीचे जो ठीक काम करता है।

         const fs = require('fs');
         fs.unlink(__dirname+ '/test.txt', function (err) {            
              if (err) {                                                 
                  console.error(err);                                    
              }                                                          
             console.log('File has been Deleted');                           
          });                                                            

मुझे यह उत्तर सबसे अच्छा लगता है क्योंकि यह उन लोगों के लिए सबसे सरल पूर्ण और सही उत्तर है जो जानना चाहते हैं कि अनलिंक पूरा होने के बाद कुछ कैसे चलता है और त्रुटि संदेश को अनुकूलित करने के बारे में परवाह नहीं है।
कॉलिन कीनन

आप __dirname का उपयोग क्यों कर रहे हैं? मुझे आश्चर्य है कि क्या हम पूर्ण पथ के बजाय एक सापेक्ष पथ रख सकते हैं?
बंपास्टर

6

2019 और नोड 10+ यहां है । मीठा async / प्रतीक्षा तरीका का उपयोग कर संस्करण के नीचे ।

अब न तो fs.unlinkप्रोमिस में लपेटने की जरूरत है और न ही अतिरिक्त पैकेज (जैसे fs-extra) का उपयोग करने की ।

बस देशी fs वादा एपीआई का उपयोग करें ।

const fs = require('fs').promises;

(async () => {
  try {
    await fs.unlink('~/any/file');
  } catch (e) {
    // file doesn't exist, no permissions, etc..
    // full list of possible errors is here 
    // http://man7.org/linux/man-pages/man2/unlink.2.html#ERRORS
    console.log(e);
  }
})();

यहाँ fsPromises.unlink Node डॉक्स से युक्ति है।

कृपया यह भी ध्यान रखें कि fs.promises API को Node 10.xx में प्रयोगात्मक के रूप में चिह्नित किया गया है (लेकिन पूरी तरह से ठीक काम करता है, हालांकि), और अब से प्रयोगात्मक नहीं है 11.14.0


3

आप वर्तमान निर्देशिका में एक या अधिक फ़ाइलों को हटाने के लिए डेल मॉड्यूल का उपयोग कर सकते हैं । इसके बारे में क्या अच्छा है जो आपको वर्तमान कार्यशील निर्देशिका और इसके बाद के संस्करण को हटाने से बचाता है।

const del = require('del');
del(['<your pathere here>/*']).then( (paths: any) => {
   console.log('Deleted files and folders:\n', paths.join('\n'));
});

यदि आपको कई फ़ाइलों को हटाने की आवश्यकता है, तो यह एक बढ़िया विकल्प है! सुझाव के लिए धन्यवाद।
सैमुअल अर्ल

2

आप fs.unlink (पथ, कॉलबैक) फ़ंक्शन का उपयोग कर सकते हैं । यहाँ "त्रुटि-वापस" पैटर्न के साथ फ़ंक्शन आवरण का एक उदाहरण है:

// Dependencies.
const fs = require('fs');

// Delete a file.
const deleteFile = (filePath, callback) => {
  // Unlink the file.
  fs.unlink(filePath, (error) => {
    if (!error) {
      callback(false);
    } else {
      callback('Error deleting the file');
    }
  })
};


2

फ़ाइल नाम के लिए regexp से मेल खाने वाली निर्देशिका से फ़ाइलें निकालें। केवल fs.unlink का उपयोग किया जाता है - एक निर्देशिका से सभी फ़ाइलों को प्राप्त करने के लिए फ़ाइल, fs.readdir को हटाने के लिए

var fs = require('fs');
const path = '/path_to_files/filename.anyextension'; 

const removeFile = (fileName) => {
    fs.unlink(`${path}${fileName}`, function(error) {
        if (error) {
            throw error;
        }
        console.log('Deleted filename', fileName);
    })
}

const reg = /^[a-zA-Z]+_[0-9]+(\s[2-4])+\./

fs.readdir(path, function(err, items) {
    for (var i=0; i<items.length; i++) {
        console.log(items[i], ' ', reg.test(items[i]))
        if (reg.test(items[i])) {
           console.log(items[i])
           removeFile(items[i]) 
        }
    }
});

2

यह fs के साथ बहुत आसान है।

var fs = require('fs');
try{
 var sourceUrls = "/sampleFolder/sampleFile.txt";
 fs.unlinkSync(sourceUrls);
}catch(err){
 console.log(err);
}



-1

यहां वह कोड जहां आप फ़ाइल / छवि को फ़ोल्डर से हटा सकते हैं।

var fs = require('fs'); 
Gallery.findById({ _id: req.params.id},function(err,data){ 
    if (err) throw err;
    fs.unlink('public/gallery/'+data.image_name);
 });

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