我正在尝试使用node.js编写一个服务器,它将像简化版的谷歌云盘/OneDrive一样工作。我编写了一个重命名文件/目录的方法,但它并不适用于所有情况。以下是代码:
try {
if (!fs.existsSync(fullPath)) {
reject(new Error('The file to be renamed does not exist!'));
} else if (fs.existsSync(newPath)) {
reject(new Error('A file already exists with that name!'));
} else {
fs.renameSync(fullPath, newPath);
resolve(newPath);
}
} catch (err) {
reject(err);
}
在没有子目录的情况下,它可以轻松地重命名文件或包含没有子目录的目录。但是当一个目录有一个或多个子目录时,重命名失败。
我正在使用Windows平台,出现以下错误。在使用 fs.chmodSync(fullPath, 0o777)
更改文件权限之前尝试过,但错误仍然存在。
"errno": -4048,
"syscall": "rename",
"code": "EPERM",
我认为问题出在Windows和它的文件系统使用上,所以我尝试将整个东西运行在Docker容器中(最终产品将部署在Docker上),但是我遇到了以下错误:
"errno": -18,
"syscall": "rename",
"code": "EXDEV",
问题在于我的路径已经标准化,而且不存在从一个驱动器复制到另一个驱动器的情况。如果我
console.log
我的完整路径(fullPath)和新路径(newPath),我得到类似下面的结果:src/test-storage/myFolder/aFolder
src/test-storage/myFolder/xFolder
非常感谢您的帮助,提前致谢。祝您有美好的一天! :)