node.js menghapus file

Jawaban:

805

Saya pikir Anda ingin menggunakannya fs.unlink.

Info lebih lanjut fsdapat ditemukan di sini .

Nick
sumber
137
Saya percaya itu berasal dari standar POSIX. Tapi Anda akan berpikir mereka bisa menambahkan deletealias!
Nick
11
@ Baru atau rmFilealias
PixnBits
9
@PixnBits atau rmalias jika mereka memiliki rmdirmetode
Robin
8
untuk pengguna Meteor, Anda mungkin ingin menggunakanfs.unlinkSync()
Erdal G.
3
Saya pikir Anda harus memberikan contoh lengkap, tautan dapat berubah.
vasilevich
223

Anda dapat menelepon fs.unlink(path, callback)untuk membatalkan tautan Asynchronous (2) atau fs.unlinkSync(path)untuk Sinkronisasi tautan sinkron (2).
Di mana pathpath file yang ingin Anda hapus.

Misalnya kita ingin menghapus discovery.docxfile dari c:/bookdirektori. Jadi jalur file saya c:/book/discovery.docx. Jadi kode untuk menghapus file itu adalah,

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

Jika Anda ingin memeriksa file sebelum menghapus apakah ada atau tidak. Jadi, gunakan fs.stat atau fs.statSync ( Sinkron ) sebagai ganti fs.exists. Karena menurut dokumentasi node.js terbaru , fs.existssekarang sudah usang .

Sebagai contoh:-

 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');
   });  
});
anggur
sumber
Bagaimana jika saya memeriksanya ada, tetapi diblokir oleh proses lain - atau, saya periksa ada, dan tidak apa-apa, tapi kemudian proses lain secara acak memblokirnya sebelum saya dapat menghapus. Bagaimana saya bisa memblokir langsung setelah memeriksa? maka tidakkah saya tidak bisa menghapus karena diblokir
4
Perhatikan bahwa fs.exists () sudah usang, tetapi fs.existsSync () tidak.
Tim
1
Ada alasannya sudah usang: sering kali Anda membuat kondisi balapan jika Anda memeriksa apakah ada file sebelum menghapusnya. Alih-alih, Anda seharusnya hanya menelepon fs.unlink, dan jika file tidak ada, Anda akan memiliki ENOENTkesalahan dalam callback. Tidak perlu memeriksa sebelum mencoba memutuskan tautan.
ZachB
@ZachB mengapa operasi penghapusan fs.unlinkdilakukan ketika file tidak ada, jadi pandangan saya adalah memeriksa file sebelum menghapus.
vineet
Anda seharusnya tidak memeriksa apakah itu ada jika ada beberapa utas atau proses yang mungkin menggunakan atau mencoba untuk menghapus file yang sama, dalam hal ini pemeriksaan Anda bahwa file itu ada akan menjadi tidak valid antara waktu Anda memeriksa itu ada dan waktu Anda mencoba menghapusnya. Cukup periksa kode kesalahan ENOENT di dalam unlinkpanggilan balik. Jika kesalahan itu terjadi, file tidak ada. Lihatlah jawaban Searene misalnya.
ZachB
34

Saya tidak berpikir Anda harus memeriksa apakah ada file atau tidak, fs.unlinkakan memeriksa untuk Anda.

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`);
    }
});
Searene
sumber
bagaimana saya bisa mendapatkan nama Gambar sebelumnya di Pengendali Kami?
Chaudhary
26

Ini potongan kecil yang saya buat untuk tujuan ini,

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.'));
  }
});
Orang asing
sumber
4
Async ada sudah usang nodejs.org/api/fs.html#fs_fs_exists_path_callback
Mirodinho
2
Bagaimana jika file tersebut dihapus oleh orang lain setelah Anda periksa fs.existsdan sebelum Anda menghapusnya fs.unlink? Itu mungkin terjadi.
Searene
4
Anda seharusnya tidak memeriksa apakah ada file sebelum mencoba memutuskan tautannya. Panggil saja unlink, dan jika tidak ada, tangani ENOENTkesalahannya. Kalau tidak, Anda dapat membuat kondisi balapan.
ZachB
9

Sebagai jawaban yang diterima, gunakan fs.unlinkuntuk menghapus file.

Tetapi menurut dokumentasi Node.js

Menggunakan fs.stat()untuk memeriksa keberadaan file sebelum memanggil fs.open(), fs.readFile()atau fs.writeFile()tidak dianjurkan. Sebagai gantinya, kode pengguna harus membuka / membaca / menulis file secara langsung dan menangani kesalahan yang muncul jika file tidak tersedia.

Untuk memeriksa apakah ada file tanpa memanipulasi setelahnya, fs.access()disarankan.

untuk memeriksa file dapat dihapus atau tidak, Gunakan fs.accesssebagai gantinya

fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => {
  console.log(err ? 'no access!' : 'can read/write');
});
jasperjian
sumber
Ini adalah jawaban yang bagus, dengan referensi Node.js. kebanyakan orang akan menggunakan unlinksecara langsung karena mereka tahu mereka memiliki hak untuk menghapus file. Tetapi fs.accessmerupakan alternatif yang baik jika mereka perlu memeriksa sebelum penghapusan. Tapi saya pikir jika mereka perlu memeriksa apakah ada file tanpa memanipulasi setelah itu, mereka seharusnya menggunakan fs.stat, fs.accessmemiliki tujuan yang berbeda menurut pendapat saya.
vdegenne
alasan mengapa dokumentasi merekomendasikan untuk tidak memeriksa keberadaan adalah karena informasi tersebut dapat berubah antara panggilan Anda ke fs.stat / fs.access dan operasi yang sebenarnya. Misalnya file bisa ada ketika Anda memanggil fs.access dan kemudian dihapus sebelum Anda menelepon fs.unlink, atau izin dapat berubah di antara dua panggilan. Karena Anda harus menangani kode kesalahan fs.unlink dalam kasus itu, tidak ada gunanya memanggil fs.stat atau fs.access.
Jannis Froese
6

Di sini, di bawah kode saya yang berfungsi dengan baik.

         const fs = require('fs');
         fs.unlink(__dirname+ '/test.txt', function (err) {            
              if (err) {                                                 
                  console.error(err);                                    
              }                                                          
             console.log('File has been Deleted');                           
          });                                                            
Thavaprakash Swaminathan
sumber
Saya suka jawaban ini yang terbaik karena ini adalah jawaban lengkap dan benar paling sederhana bagi mereka yang ingin tahu bagaimana menjalankan sesuatu setelah pembatalan tautan selesai dan tidak peduli tentang menyesuaikan pesan kesalahan.
Colin Keenan
mengapa Anda menggunakan __dirname? Saya ingin tahu apakah kita dapat menempatkan jalur relatif alih-alih jalur penuh?
The Bumpaster
6

2019 dan Node 10+ ada di sini . Di bawah versi menggunakan async / cara menunggu yang manis .

Sekarang tidak perlu lagi terikat fs.unlinkdengan Janji atau menggunakan paket tambahan (seperti fs-extra) lagi.

Cukup gunakan asli fs Promises API .

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

Berikut ini fsPromises.unlink spesifikasi dari Node docs.

Harap perhatikan juga bahwa fs.promises API ditandai sebagai eksperimental di Node 10.xx (namun berfungsi dengan baik,), dan tidak lagi eksperimental sejak itu 11.14.0.

Artyom Pranovich
sumber
3

Anda dapat menggunakan modul del untuk menghapus satu atau lebih file di direktori saat ini. Apa yang baik tentang itu adalah yang melindungi Anda dari menghapus direktori kerja saat ini dan di atasnya.

const del = require('del');
del(['<your pathere here>/*']).then( (paths: any) => {
   console.log('Deleted files and folders:\n', paths.join('\n'));
});
amazia
sumber
Jika Anda perlu menghapus banyak file, ini adalah opsi yang bagus! Terima kasih atas sarannya.
Samuel Earl
2

Anda dapat menggunakan fungsi fs.unlink (path, callback) . Berikut adalah contoh pembungkus fungsi dengan pola "error-back":

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

Oleksii Trekhleb
sumber
2

Hapus file dari direktori yang cocok dengan regexp untuk nama file. Hanya digunakan fs.unlink - untuk menghapus file, fs.readdir - untuk mendapatkan semua file dari direktori

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]) 
        }
    }
});
Xenia Lvova
sumber
2

Sangat mudah dengan fs.

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

Di sini kode tempat Anda dapat menghapus file / gambar dari folder.

var fs = require('fs'); 
Gallery.findById({ _id: req.params.id},function(err,data){ 
    if (err) throw err;
    fs.unlink('public/gallery/'+data.image_name);
 });
Mahesh singh chouhan
sumber
Karena simpul 7 argumen panggilan balik tidak lagi opsional dan akan menghasilkan peringatan. Lewati fungsi kosong jika Anda benar-benar tidak peduli.
jlh