// check if this item has an uploaded image file
var imageFullPathName = __dirname + "/../public/images/" + req.params.itemId;
logger.log("imageFullPathName = " + imageFullPathName);
var normalizedPathName = path.normalize(imageFullPathName);
logger.log("normalizedPathName = " + normalizedPathName);
// delete the image if it exists
fs.exists(normalizedPathName, function(exists) {
console.log("Found the file: " + normalizedPathName);
normalizedPathName = normalizedPathName.replace(/\\/g,"\\\\");
console.log("New path name = " + normalizedPathName);
fs.unlink(normalizedPathName, function(err){
if (err){
console.error("Error in call to fs.unlink");
}
});
});
我得到了以下输出:
imageFullPathName = C:\IronKey\hes\cscie-71\project\medical-interchange\routes/../public/images/5658e5612103cb2c41000006
normalizedPathName = C:\IronKey\hes\cscie-71\project\medical-interchange\public\images\5658e5612103cb2c41000006
新路径名 = C:\\IronKey\\hes\\cscie-71\\project\\medical-interchange\\public\\images\\5658e5612103cb2c41000006
在调用fs.unlink时出错
当我使用DOS shell查找文件时,该文件确实存在。无论我如何更改新路径名,都无法删除该文件。如果我通过注释掉对normalizedPathName.replace()
的调用来保留单个反斜杠的路径,它仍然失败。但是,如果我手动创建这样的字符串,它就能够工作:
fs.unlink("c:\\IronKey\\hes\\cscie-71\\project\\medical-interchange\\public\\images\\5658e5612103cb2c41000006", function(err){ ...
我该怎么做才能删除这个文件?我完全被难住了。
我按照josh3736的建议修改了代码,但我收到了一个ENOENT错误。由于错误消息中报告的完整路径名,该文件显然存在并且我已经在我的编辑器中打开了它:
// check if this item has an uploaded image file
var imageFullPathName = path.join(__dirname, "../public/images",
sanitize(req.params.itemId));
logger.log("imageFullPathName = " + imageFullPathName);
fs.unlink(imageFullPathName, function(err){
//if (err.code != 'ENOENT'){
if (err){
logger.log("Error in call to fs.unlink", err);
}
else{
logger.log("No file found");
}
logger.log("Delete Success");
});
错误信息如下: 调用fs.unlink时出错 {[Error: ENOENT:没有此文件或目录,unlink 'C:\\IronKey\\hes\\cscie-71\\project\\medical-interchange\\public\\images\\5658fd27fca1b3bc3d00000e']}
normalizedPathName
时要执行fs.exists()
,然后再尝试更改它才删除?此外,fs.exists()
是一种反模式。只需尝试删除并处理不存在的错误即可。 - jfriend00fs.unlink()
而不进行fs.exists()
调用。如果不起作用,则查看返回的确切错误并使用该错误进行诊断。fs.exists()
已弃用,因为存在并发问题。在多任务操作系统中,文件可以在调用fs.exists()
和调用fs.unlink()
之间被其他进程删除。您可以只调用fs.unlink()
并处理错误(如果文件不存在)。没有理由进行fs.exists()
调用。 - jfriend00