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

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

目录

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

问题

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

解决

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

方法一、createReadStream 和 createWriteStream

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

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

varfs=require('fs');
varis=fs.createReadStream('/a/b/source/file');
varos=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博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!

目录
相关文章
|
3月前
|
存储 Unix 数据挖掘
服务器数据恢复—SAN环境下LUN Mapping出错导致文件系统共享冲突的数据恢复案例
服务器数据恢复环境: SAN环境下一台存储设备中有一组由6块硬盘组建的RAID6磁盘阵列,划分若干LUN,MAP到不同业务的SOLARIS操作系统服务器上。 服务器故障: 用户新增了一台服务器,将存储中的某个LUN映射到新增加的这台服务器上。这个映射的LUN其实之前已经MAP到其他SOLARIS操作系统的服务器上了。由于没有及时发现问题,新增加的这台服务器已经对此LUN做了初始化操作,磁盘报错,重启后发现卷无法挂载。
|
分布式计算 负载均衡 算法
紧急扩散!HDFS3.X 系列的 EC 纠删码策略有个安全隐患 HDFS-16420,极端情况下会造成数据丢失!
紧急扩散!HDFS3.X 系列的 EC 纠删码策略有个安全隐患 HDFS-16420,极端情况下会造成数据丢失!
|
存储 缓存 算法
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
209 1
|
存储
磁盘满的本质分析——磁盘空间满与inode节点满
磁盘满的本质分析——磁盘空间满与inode节点满
229 1
磁盘满的本质分析——磁盘空间满与inode节点满
|
存储 Linux 编译器
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(上)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(上)
252 0
|
Kubernetes NoSQL Cloud Native
Juice FS 初探 | 一种为 VPS 提供无限磁盘空间的解决方案
**JuiceFS** 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布
374 0
|
小程序 C语言 芯片
如何做bin文件升级以及数据定位——文件操作函数簇!
如何做bin文件升级以及数据定位——文件操作函数簇!
|
运维
跨磁盘扩容根目录
物理卷 Physical Volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的 header,其余部分被切割为一块块物理区域(physical extents) 卷组 Volume group (VG):将一组物理卷收集为一个管理单元 逻辑卷 Logical volume (LV):虚拟分区,由物理区域(physical extents)组成 物理区域 Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为 4MB)
212 0
|
存储 缓存 块存储
HDFS工作机制和读写流程
HDFS工作机制和读写流程
177 0
HDFS工作机制和读写流程
|
存储 缓存 算法
文件系统与磁盘常见优化方案和术语
文件系统与磁盘常见优化方案和术语
文件系统与磁盘常见优化方案和术语