Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)

  • Post category:http

当Node.js调用fs.renameSync时,如果路径跨越了不同的设备,那么就有可能出现”Error:EXDEV,cross-devicelinknotpermitted”的错误。

原因是:Rename在文件系统中是通过移动文件实现的。如果目标路径和源路径在不同的设备上,就会出现”cross-device link not permitted”的错误。这个错误发生在Unix系统上更常见。

解决这个问题的方法有两种:

方法1:使用fs.copyFileSync和fs.unlinkSync

使用fs.copyFileSync先复制文件,再用fs.unlinkSync删除原始文件。下面是一个示例:

const fs = require('fs');

fs.copyFileSync('path/to/source', 'path/to/destination');
fs.unlinkSync('path/to/source');

方法2:使用Node.js的child_process模块调用shell命令

使用child_process模块调用shell命令来实现重命名。下面是一个示例:

const { execSync } = require('child_process');

execSync('mv path/to/source path/to/destination');

需要注意的是:使用child_process模块调用shell命令会增加应用程序的风险,应该慎重考虑使用此方法。

上述两种方法都可以成功避免”Error:EXDEV,cross-devicelinknotpermitted”的错误。