如何在nodeJS中使用文件系统删除文件?
how to delete file using FileSystem in nodeJS?
我不知道为什么,但我无法使用 unlink()
和 unlinksynk()
.
删除文件
我使用 multiparty.Form()
方法存储了文件。它将生成具有随机名称和 returns filePath
和 originalFileName
的文件。在此之后我用 originalFileName
.
重命名了文件
代码:
await form.parse(fileData, (err: Error, fields: any, res: any) => {
if (err) {
callback(err, null);
} else {
let file_path = res.file[0].path;
let assignedFilePath = file_path.substr(res.file[0].path.lastIndexOf('\/') + 1);
let originalFilePath = res.file[0].originalFilename;
originalFilePath = path.dirname(assignedFilePath) + '\' + originalFilePath;
fs.rename(assignedFilePath, originalFilePath, function (err: any) {
if (err)
callback(err, null);
else
callback(err, JSON.stringify({'path': originalFilePath}));
});
}
});
deleteFile() 代码
deleteTempFiles(tempFolderPath: string) {
return new Promise(function (resolve: any, reject: any) {
fs.readdir(tempFolderPath, (err: any, files: any) => {
if (err) {
reject();
} else {
for (let file of files) {
fs.unlink(tempFolderPath + file, (err: any) => {
if (err) {
reject();
}
});
}
resolve();
}
});
}).catch(function (e) {
Promise.reject(e.message);
})
}
编辑:
错误是,在删除文件时,编译器说 Error: EBUSY: resource busy or locked, unlink
。
而且我认为我没有在程序中的任何地方使用该文件?
提前致谢。
==== 第二个回答===
你的deleteTempFiles
函数完全错误
阅读此 removing of each file in directory (and directories) inside a dir
您的代码中有很多逻辑错误。
- 您使用 synchronius for 循环,对从给定目录中删除文件(和目录)列表的任务进行排队。
- 您取消所有链接 - 甚至目录
.
和 ..
- 不可能
- 你总是在那个循环之后
resolve
s,并在第一个错误之后拒绝 - 但通常拒绝应该在解决之后很久(循环很快,它只排队 io 访问,还没有执行取消链接,然后resolve 被执行)。
====第一个回答===
您有 renameFile
的代码,它将文件从旧名称(和位置)移动到新名称。因此删除旧文件根本不起作用,所以您应该删除新文件。
我不知道为什么,但我无法使用 unlink()
和 unlinksynk()
.
我使用 multiparty.Form()
方法存储了文件。它将生成具有随机名称和 returns filePath
和 originalFileName
的文件。在此之后我用 originalFileName
.
代码:
await form.parse(fileData, (err: Error, fields: any, res: any) => {
if (err) {
callback(err, null);
} else {
let file_path = res.file[0].path;
let assignedFilePath = file_path.substr(res.file[0].path.lastIndexOf('\/') + 1);
let originalFilePath = res.file[0].originalFilename;
originalFilePath = path.dirname(assignedFilePath) + '\' + originalFilePath;
fs.rename(assignedFilePath, originalFilePath, function (err: any) {
if (err)
callback(err, null);
else
callback(err, JSON.stringify({'path': originalFilePath}));
});
}
});
deleteFile() 代码
deleteTempFiles(tempFolderPath: string) {
return new Promise(function (resolve: any, reject: any) {
fs.readdir(tempFolderPath, (err: any, files: any) => {
if (err) {
reject();
} else {
for (let file of files) {
fs.unlink(tempFolderPath + file, (err: any) => {
if (err) {
reject();
}
});
}
resolve();
}
});
}).catch(function (e) {
Promise.reject(e.message);
})
}
编辑:
错误是,在删除文件时,编译器说 Error: EBUSY: resource busy or locked, unlink
。
而且我认为我没有在程序中的任何地方使用该文件?
提前致谢。
==== 第二个回答===
你的deleteTempFiles
函数完全错误
阅读此 removing of each file in directory (and directories) inside a dir
您的代码中有很多逻辑错误。
- 您使用 synchronius for 循环,对从给定目录中删除文件(和目录)列表的任务进行排队。
- 您取消所有链接 - 甚至目录
.
和..
- 不可能 - 你总是在那个循环之后
resolve
s,并在第一个错误之后拒绝 - 但通常拒绝应该在解决之后很久(循环很快,它只排队 io 访问,还没有执行取消链接,然后resolve 被执行)。
====第一个回答===
您有 renameFile
的代码,它将文件从旧名称(和位置)移动到新名称。因此删除旧文件根本不起作用,所以您应该删除新文件。