使用readdirSync读取文件夹后,使用node.js重命名该文件夹。但权限被拒绝

时间:2017-10-27 02:05:52

标签: javascript node.js

我正在开发个人node.js文件管理系统。

程序必须能够读取文件夹中的所有文件夹,并将它们与列表进行比较。如果文件夹不在该列表中,则会将它们移动到新目录中。

例如,列表将是:

folder1, folder2, folder3

目录树看起来像这样

              mainFolder
    _____________|_____________
   |        |      |           |
folder1   folder2  folder3   folder4

在这种情况下,“folder4”不在列表中,应该移动。

我在node.js中使用fs.readdirSync命令将文件夹存储到这样的数组中:

var foldersInDirectory= []; //my storage array
fs.readdirSync(mainFolder).forEach(file => {
  foldersInDirectory.push(file);
});

然后我做了一些代码来比较我的列表和数组,以及我试图移动的列表中没有的内容。在下面的代码中,为简单起见,我只使用名称“folder4”。

fs.rename('folder4', 'newFolder', function(err) {
    if ( err ) console.log('ERROR: ' + err);
});

但是我收到权限错误。经过一些研究后,我发现错误来自打开的文件夹。所以我试图反转代码并首先执行“重命名”功能。这非常有效,但是为了让我的真实世界代码能够工作,我必须能够在移动文件夹之前将文件夹与我的列表进行比较。

在我将其添加到我的列表后,是否有命令关闭“folder4”。或者让nginx释放它以便可以重命名?

我尝试过将重命名功能放入设置超时功能但这不起作用。非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:-1)

好吧,我没有直接找到问题的解决方案,但我确实找到了解决方法。

即使在读取之后,remove directory命令仍会在node.js中触发。

所以我复制了我想要移动到数组中的目录的所有内容。

然后我运行此命令删除目录:

fs.rmdir('folder4', (err) => {
  if (err) throw err;
  console.log('successfully deleted directory');
});

使用我之前制作的数组,我重新制作了目标文件夹中的目录。看起来像是一种解决方法,我希望有一种更简单的方法,但这对我有用。

如果有人有任何其他建议/反馈,请让我知道,谢谢!