我正在开发个人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释放它以便可以重命名?
我尝试过将重命名功能放入设置超时功能但这不起作用。非常感谢任何帮助,谢谢!
答案 0 :(得分:-1)
好吧,我没有直接找到问题的解决方案,但我确实找到了解决方法。
即使在读取之后,remove directory命令仍会在node.js中触发。
所以我复制了我想要移动到数组中的目录的所有内容。
然后我运行此命令删除目录:
fs.rmdir('folder4', (err) => {
if (err) throw err;
console.log('successfully deleted directory');
});
使用我之前制作的数组,我重新制作了目标文件夹中的目录。看起来像是一种解决方法,我希望有一种更简单的方法,但这对我有用。
如果有人有任何其他建议/反馈,请让我知道,谢谢!