【发布时间】:2011-07-15 23:13:32
【问题描述】:
【问题讨论】:
标签: node.js
【问题讨论】:
标签: node.js
您可以调用fs.unlink(path, callback) 进行异步取消链接(2) 或调用fs.unlinkSync(path) 进行同步取消链接(2)。
其中path 是您要删除的文件路径。
例如,我们想从c:/book 目录中删除discovery.docx 文件。所以我的文件路径是c:/book/discovery.docx。所以删除该文件的代码将是,
var fs = require('fs');
var filePath = 'c:/book/discovery.docx';
fs.unlinkSync(filePath);
【讨论】:
如果您想在删除之前检查文件是否存在。因此,请使用 fs.stat 或 fs.statSync (同步) 而不是 fs.exists。因为根据最新的node.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');
});
});
【讨论】:
fs.unlink,如果该文件不存在,您将在回调中出现ENOENT 错误。在尝试取消链接之前无需检查。
fs.unlink 在文件不存在时执行,所以我的观点是在删除之前检查文件。
unlink 回调中的 ENOENT 错误代码。如果发生该错误,则该文件不存在。以 Searene 的回答为例。
我认为您不必检查文件是否存在,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`);
}
});
【讨论】:
这是我为此目的制作的一个小sn-p,
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.'));
}
});
【讨论】:
fs.exists 核对并在您与fs.unlink 删除之前被其他人删除怎么办?它可能会发生。
unlink,如果它不存在,则处理ENOENT 错误。否则,您可以创建竞争条件。
2019 和 Node 10+ 在这里。下面的版本使用甜蜜的async/await方式。
现在无需将 fs.unlink 包装到 Promises 中,也无需再使用其他包(如 fs-extra)。
只需使用原生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);
}
})();
Here isfsPromises.unlink 来自 Node 文档的规范。
另外请注意,fs.promises API 在 Node 10.x.x 中被标记为实验性(但工作完全正常),并且自 11.14.0 以来不再是实验性的。
【讨论】:
作为接受的答案,使用fs.unlink 删除文件。
不建议在调用
fs.open()、fs.readFile()或fs.writeFile()之前使用fs.stat()检查文件是否存在。相反,用户代码应该直接打开/读取/写入文件并处理文件不可用时引发的错误。要检查文件是否存在而不进行后续操作,建议使用
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');
});
【讨论】:
unlink,因为他们知道他们有权删除文件。但是fs.access 是一个不错的选择,如果他们需要在删除前进行检查。但我认为如果他们需要检查文件是否存在而不事后对其进行操作,他们自然应该使用fs.stat,在我的拙见中fs.access有不同的用途。
2020 年答案
随着节点 v14.14.0 的发布,您现在可以这样做了。
fs.rmSync("path/to/file", {
force: true,
});
【讨论】:
下面是我的代码,它工作正常。
const fs = require('fs');
fs.unlink(__dirname+ '/test.txt', function (err) {
if (err) {
console.error(err);
}
console.log('File has been Deleted');
});
【讨论】:
简单和同步
if (fs.existsSync(pathToFile)) {
fs.unlinkSync(pathToFile)
}
【讨论】:
你可以做以下事情
const deleteFile = './docs/deleteme.txt'
if (fs.existsSync(deleteFile)) {
fs.unlink(deleteFile, (err) => {
if (err) {
console.log(err);
}
console.log('deleted');
})
}
【讨论】:
fs.unlinkSync() 如果你想同步删除文件并且fs.unlink() 如果你想异步删除它。Here你可以找到一篇好文章。
【讨论】:
rm -rf吧require("fs").rmSync(file_or_directory_path_existing_or_not, {recursive: true, force: true});
// Added in Node.js 14.14.0.
使用require("fs").rmSync 或require("fs").rm。
【讨论】:
您可以使用del 模块删除当前目录中的一个或多个文件。它的好处是可以防止您删除当前工作目录及更高版本。
const del = require('del');
del(['<your pathere here>/*']).then( (paths: any) => {
console.log('Deleted files and folders:\n', paths.join('\n'));
});
【讨论】:
您可以使用fs.unlink(path, callback) 函数。下面是一个带有“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');
}
})
};
【讨论】:
从与文件名的正则表达式匹配的目录中删除文件。仅使用 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])
}
}
});
【讨论】:
使用 fs 很容易。
var fs = require('fs');
try{
var sourceUrls = "/sampleFolder/sampleFile.txt";
fs.unlinkSync(sourceUrls);
}catch(err){
console.log(err);
}
【讨论】:
fs-extra提供remove方法:
const fs = require('fs-extra')
fs.remove('/tmp/myfile')
.then(() => {
console.log('success!')
})
.catch(err => {
console.error(err)
})
https://github.com/jprichardson/node-fs-extra/blob/master/docs/remove.md
【讨论】:
使用NPM module fs-extra,它可以为您提供 fs 中的所有内容,而且所有内容都是 Promisified。作为奖励,有一个 fs.remove() method 可用。
【讨论】:
这里是您可以从文件夹中删除文件/图像的代码。
var fs = require('fs');
Gallery.findById({ _id: req.params.id},function(err,data){
if (err) throw err;
fs.unlink('public/gallery/'+data.image_name);
});
【讨论】: