如何解决 fs.renameSync() 跨区移动文件的问题

举报
liuzhen007 发表于 2021/11/07 21:22:03 2021/11/07
【摘要】 目录问题解决方法一、createReadStream 和 createWriteStream方法二、mv结尾 问题上一篇文章,我们介绍了 fs.renameSync 方法的两种报错类型,也分别介绍了解决方法。其实在解决 fs.renameSync 跨区移动文件时,也有别的解决方法,下面我们就来一起看一看。 解决今天介绍解决 fs.renameSync 跨区移动文件报错的问题,一种有两种方法,...

目录

  • 问题
  • 解决
    • 方法一、createReadStream 和 createWriteStream
    • 方法二、mv
  • 结尾

问题

上一篇文章,我们介绍了 fs.renameSync 方法的两种报错类型,也分别介绍了解决方法。其实在解决 fs.renameSync 跨区移动文件时,也有别的解决方法,下面我们就来一起看一看。

解决

今天介绍解决 fs.renameSync 跨区移动文件报错的问题,一种有两种方法,接下来分别介绍。

方法一、createReadStream 和 createWriteStream

可以先使用 fs 库的 createReadStream 方法打开并读取源文件内容,同时创建读取流,然后使用 fs 库的 createWriteStream 方法创建目标文件同时打开写入流。之后利用管道方法 pipe,建立二者的关系。最后,监听读取流的结束事件,当事件触发时删除源文件。

下面是整个过程的代码实例,请参考:

 var fs = require('fs');
 var is = fs.createReadStream('/a/b/source/file');
 var os = fs.createWriteStream('/c/d/destination/file');
 is.pipe(os);
 is.on('end',function() {
    fs.unlinkSync('source_file');
 });

方法二、mv

现在,我们来介绍第二种方法。这次不使用 fs 系统库,而是使用了第三库 mv。

使用之前,首先需要安装,命令如下:

npm i mv

然后是引入库,代码如下:

var mv = require(‘mv’);

mv 方法可以只有两个参数,第一个参数是源文件的地址,第二个参数是目标文件的地址。其实,这是 mv
方法的默认使用方式,原理上是首先使用系统的 fs.rename 方法,如果有问题,就会回退上面介绍的第一种方法。具体的使用实例代码如下:

mv('/a/b/source/file', '/c/d/destination/file', function(err) {
  // done. it tried fs.rename first, and then falls back to
  // piping the source file to the dest file and then unlinking
  // the source file.
});

当然,我们也可以显示的启动 mv 方法的第三个参数,主动设置一些策略,比如下面的方法,就是首先创建所有需要的目录,再进行上面的逻辑。代码参考如下:

mv('/a/b/source/file', '/c/d/destination/file', {mkdirp: true}, function(err) {
  // done. it first created all the necessary directories, and then
  // tried fs.rename, then falls back to using ncp to copy the dir
  // to dest and then rimraf to remove the source dir
});

结尾

好了,两种解决跨区域移动文件的方法就介绍完了。感兴趣的小伙伴,不妨自己动手试试。常言道:实践出真知,古人诚不欺我!

作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是CSDN博客专家、华为云社区云享专家,欢迎关注我分享更多干货!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。