2011-03-15 54 views

回答

547

我想你想使用fs.unlink

fs

更多信息,可以發現here

+86

我相信它來自POSIX標準。但是你會認爲他們可以添加一個'delete'別名! – Nick 2012-09-13 08:04:01

+23

同意,但要了解更多背景http://en.wikipedia.org/wiki/Unlink_(Unix) – i3enhamin 2013-04-23 20:25:50

+6

@Nick或'rmFile'別名 – PixnBits 2015-05-19 15:42:28

138

您可以撥打fs.unlink(path, callback)異步的unlink(2)或fs.unlinkSync(path)用於同步的unlink(2)。
其中path是您要刪除的文件路徑。

例如,我們想從c:/book目錄中刪除discovery.docx文件。所以我的文件路徑是c:/book/discovery.docx。所以代碼刪除該文件會,

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

這裏是一個小片段的我爲這個目的而作出,

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

異步存在已被棄用https://nodejs.org/api/fs.html#fs_fs_exists_path_callback – Mirodinho 2016-11-09 17:06:53

+1

如果在使用'fs.exists'檢查並在使用'fs.unlink'刪除它之前,文件被其他人刪除,該怎麼辦?它可能發生。 – Searene 2017-02-20 00:42:03

+2

在嘗試解除鏈接之前,您不應該檢查文件是否存在。只要調用'unlink',如果它不存在,則處理'ENOENT'錯誤。否則,您可以創建競賽條件。 – ZachB 2017-07-25 05:28:27

43

如果您想檢查文件之前刪除它是否存在與否。因此,使用fs.statfs.statSync同步),而不是fs.exists。因爲根據最新的節點.js documentation,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'); 
    }); 
}); 
+0

如果我檢查它是否存在,但是它被另一個進程阻塞 - 或者我檢查它存在,並且很好,但是在我能夠刪除之前,另一個進程會隨機阻止它。如何在檢查後立即封鎖?那麼我不能刪除它的阻止 – 2016-10-11 15:40:09

+0

請注意,fs.exists()已被棄用,但fs.existsSync()不是。 – Tim 2017-01-21 16:14:48

+0

有一個不推薦的原因:如果在刪除文件之前檢查文件是否存在,通常會創建競爭條件。相反,你應該只調用'fs.unlink',如果文件不存在,你將在回調中出現'ENOENT'錯誤。在嘗試取消鏈接之前不需要檢查。 – ZachB 2017-07-25 05:26:20

-2

這裏的代碼,你可以從文件夾中刪除文件/圖像。

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

由於節點7的回調參數不再是可選的,並且會導致警告。如果你真的不關心它,傳遞一個空函數。 – jlh 2017-07-24 12:14:18

11

我覺得你沒有檢查,如果文件存在與否,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`); 
    } 
}); 
+0

如何在我們的控制器中獲得以前的圖像名稱? – Chaudhary 2017-12-06 04:54:15

+0

謝謝Searene,這適用於我的場景。 – user752746 2018-01-26 23:04:41

3

作爲公認的答案,使用fs.unlink刪除文件。

但根據Node.js documentation

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

可以使用del模塊刪除當前目錄中的一個或多個文件。它的好處是可以防止刪除當前和以上的工作目錄。

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