node.js dosyayı kaldır


Yanıtlar:


804

Bence kullanmak istiyorsun fs.unlink.

İlgili daha fazla bilgi fsbulunabilir burada .


137
POSIX standardından geldiğine inanıyorum. Ama bir deletetakma ad ekleyebileceklerini düşünürsün !
Nick

11
@Nick ya da bir rmFiletakma ad
PixnBits

9
@PixnBits veya yöntemleri rmvarsa takma adrmdir
Robin

8
Meteor kullanıcıları içinfs.unlinkSync()
Erdal G.

3
Bence bütün bir örnek vermelisiniz, bağlantılar değişebilir.
vasilevich

223

fs.unlink(path, callback)Eşzamansız bağlantıyı kaldırmayı (2) veya Eşzamanlı bağlantıyı kaldırmayı (2) arayabilirsiniz fs.unlinkSync(path). Kaldırmak istediğiniz dosya yolu
nerede path.

Örneğin discovery.docxdosyayı dizinden kaldırmak istiyoruz c:/book. Yani dosya yolum c:/book/discovery.docx. Bu dosyayı kaldırmak için kod,

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

64

Dosyayı kontrol etmeden önce var olup olmadığını kontrol etmek istiyorsanız. Bu nedenle, yerine fs.stat veya fs.statSync ( Senkron ) kullanın fs.exists. Çünkü en son node.js belgelerine göre fs.existsartık kullanımdan kaldırıldı .

Örneğin:-

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

Ne olduğunu kontrol edersem, ama başka bir işlem tarafından engellenirse - ya da var olduğunu kontrol ederim ve iyi, ama sonra başka bir işlem silmeden önce rasgele engeller. Kontrol ettikten hemen sonra nasıl engellerim? sonra bloke olarak silmek mümkün olmaz

4
Fs.exists () öğesinin kullanımdan kaldırıldığını, ancak fs.existsSync () öğesinin kullanılmadığını unutmayın.
Tim

1
Kullanımdan kaldırılmasının bir nedeni var: Bir dosyayı silmeden önce var olup olmadığını kontrol ederseniz, çoğu zaman bir yarış koşulu oluşturursunuz. Bunun yerine, yalnızca aramalısınız fs.unlinkve dosya yoksa ENOENT, geri aramada bir hata oluşur. Bağlantıyı kaldırmayı denemeden önce kontrol etmeye gerek yok.
ZachB

@ZachB neden silme işlemi fs.unlinkdosya olmadığında gerçekleştiriliyor, bu yüzden benim görüşüm kaldırmadan önce kontrol dosyası.
Vine

Aynı dosyayı kullanıyor veya silmeye çalışabilecek birden fazla iş parçacığı veya işlem olup olmadığını kontrol etmemelisiniz; bu durumda dosyanın var olup olmadığını kontrol ettiğinizde, dosyanın varlığını kontrol ettiğiniz zaman ile silmeye çalışıyorsunuz. Sadece unlinkgeri aramada ENOENT hata kodunu kontrol edin . Bu hata oluşursa dosya yoktu. Örneğin Searene'nin cevabına bakın.
ZachB

34

Dosyanın var olup olmadığını kontrol etmeniz gerektiğini düşünmüyorum, sizin için kontrol fs.unlinkedecektir.

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

Denetleyicimizde önceki Resim adını nasıl alabilirim?
Chaudhary

26

İşte bu amaçla yaptığım küçük bir pasaj,

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


2
Dosya kontrol edildikten fs.existsve kaldırılmadan önce başkaları tarafından silinirse ne olur fs.unlink? Olabilir.
Searene

4
Bir dosyanın bağlantısını kaldırmayı denemeden önce dosyanın var olup olmadığını kontrol etmemelisiniz. Sadece arayın unlinkve yoksa, ENOENThatayı ele alın . Aksi takdirde bir yarış koşulu oluşturabilirsiniz.
ZachB

9

Kabul edilen cevap olarak, fs.unlinkdosyaları silmek için kullanın .

Ancak Node.js belgelerine göre

Kullanılması fs.stat()çağırmadan önce bir dosyanın varlığını denetlemek için fs.open(), fs.readFile()ya da fs.writeFile()tavsiye edilmez. Bunun yerine, kullanıcı kodu dosyayı doğrudan açmalı / okumalı / yazmalı ve dosya bulunmuyorsa oluşan hatayı işlemelidir.

Bir dosyanın daha sonra değiştirilmeden var olup olmadığını kontrol etmek fs.access()için önerilir.

check dosyalar silinmiş ya da olmasın, Kullanım edilebilir fs.accessyerine

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

Bu, Node.js referansıyla iyi bir yanıttır. çoğu kişi unlinkdosyayı silme haklarına sahip olduklarını bildikleri için doğrudan kullanır . Ancak fs.access, silinmeden önce kontrol etmeleri gerekiyorsa iyi bir alternatiftir. Ama onlar bir dosya sonradan manipüle etmeden varlığının kontrol edilmesi gerekiyorsa, bunlar doğal olarak kullanması gereken düşünüyorum fs.stat, fs.accessbenim düşünceme göre farklı bir amacı vardır.
vdegenne

belgelerin varoluş kontrolüne karşı önerilmesinin nedeni, bilgilerin fs.stat / fs.access çağrısı ile fiili işlem arasında değişebilmesidir. Örneğin, fs.access'i çağırdığınızda dosya var olabilir ve daha sonra fs.unlink'i çağırmadan önce silinebilir veya izinler iki çağrı arasında değişebilir. Bu durumda fs.unlink hata kodlarını işlemeniz gerektiğinden, fs.stat veya fs.access'i çağırmanın bir anlamı yoktur.
Jannis Froese

6

Burada benim kod iyi çalışıyor.

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

Bu yanıtı en iyi şekilde seviyorum çünkü bağlantıyı tamamladıktan sonra bir şeyi nasıl çalıştıracağını bilmek ve hata mesajını özelleştirmeyi umursamayanlar için en basit tam ve doğru cevap.
Colin Keenan

neden __dirname kullanıyorsun Acaba tam yol yerine göreceli bir yol koyabilir miyiz?
Bumpaster

6

2019 ve Düğüm 10+ burada . Sürümün altında tatlı asenkron / bekliyor yolunu kullanarak .

Artık fs.unlinkPromises'e ya da ek paketler (gibi fs-extra) kullanmaya gerek yok.

Sadece yerel FS Promises API'sını kullanın .

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

İşte fsPromises.unlink Düğüm belgelerinden spec.

Ayrıca, fs.promises'ın 10. Düğümde deneysel olarak işaretlenmiş API'yı (ancak yine de tamamen iyi çalışıyor) ve o zamandan beri deneysel olmadığını unutmayın 11.14.0.


3

geçerli dizindeki bir veya daha fazla dosyayı kaldırmak için del modülünü kullanabilirsiniz . bunun güzel yanı sizi geçerli çalışma dizinini ve üstünü silmeye karşı koruyabilmesidir.

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

Birden fazla dosyayı silmeniz gerekiyorsa, bu harika bir seçenektir! Öneri için teşekkürler.
Samuel Earl

2

Sen kullanabilir fs.unlink (yol, geri arama) işlevini. Aşağıda "hata geri" desenli işlev sarmalayıcı örneği:

// 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

Dosya adı için regexp ile eşleşen dizindeki dosyaları kaldırın. Yalnızca fs.unlink - dosyayı kaldırmak için, fs.readdir - bir dizindeki tüm dosyaları almak için kullanılır

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 ile çok kolay.

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



-1

Burada dosya / resmi klasörden silebileceğiniz kod.

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

Düğüm 7'den beri geri çağrı argümanı artık isteğe bağlı değildir ve bir uyarı ile sonuçlanır. Gerçekten umursamıyorsanız boş bir işlevi geçin.
jlh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.