nodejs 实现文件拷贝
通过4中不通的方式实现对一个文件的拷贝
方式一:readFile 异步一次性读取文件再写入
//异步形式读取文件
function copyFile(url){
const extName = path.extname(url)
const fileName = path.basename(url)
const dirName = path.dirname(url)
fs.readFile(url, (err, data) => {
fs.writeFile(`${dirName}/${fileName}_copy_1${extName}`, data , err => {
if(err){
console.log(`写入出现错误 ${err.toString()}`)
}else{
console.log('完成!')
}
})
})
}
方式二:readFileSync 同步一次性读取文件再写入
//同步形式读取文件
function copySync(url){
const extName = path.extname(url)
const fileName = path.basename(url)
const dirName = path.dirname(url)
var data = fs.readFileSync(url)
fs.writeFileSync(`${dirName}/${fileName}_copy_1${extName}`,data)
console.log('同步拷贝完成!')
}
方式三:使用流边读边写
const fs = require('fs')
const path = require('path')
// 使用流拷贝
function streamCopyFile(url){
const extName = path.extname(url)
const fileName = path.basename(url)
const dirName = path.dirname(url)
let options = {
highWaterMark : 64 * 1024 //默认值,每个chunk的大小
}
const readable = fs.createReadStream(url, options)
const writable = fs.createWriteStream(`${dirName}/${fileName}_copy${extName}`)
var size = 0
var totalSize = 0
const stat = fs.stat(url, (err , stats) => {
totalSize = stats.size
})
readable.on('open', () => {
console.log('打开文件');
})
readable.on('data', data => {
size = data.length + size
console.log('已完成 ' + parseInt((size / totalSize) * 100) + '%');
writable.write(data)
readable.pause()
})
readable.on('end', () => {
console.log('读取完成')
})
readable.on('error', err => {
console.log(`读取时出现错误 ${err.toString()}`)
})
writable.on('error', err => {
console.log(`写入时出现错误 ${err.toString()}`)
})
//将内存中数据全部写入文件后触发 drain 事件
writable.on('drain', () => {
readable.resume()
})
writable.on('finish', () => {
console.error('写入完成');
})
}
方式四:使用pipe
//通过管道的方式
function pipeCopyFile(url){
const extName = path.extname(url)
const fileName = path.basename(url)
const dirName = path.dirname(url)
const readable = fs.createReadStream(url)
const writable = fs.createWriteStream(`${dirName}/${fileName}_copy_2${extName}`)
var size = 0
var totalSize = 0
const stat = fs.stat(url, (err , stats) => {
totalSize = stats.size
})
writable.on('pipe', (src) => {
console.log('有数据正通过管道流入写入器')
})
writable.on('finish', () => {
console.error('写入已完成')
})
readable.pipe(writable)
}
方法一和方法二使用起来简单,但是在操作大文件时对内存压力大,不推荐读取大文件使用
另外如果需要对文件制定块进行读取和写入请使用read 、write 两个方法
nodejs 实现文件拷贝的更多相关文章
- nodejs 文件拷贝
小文件拷贝 我们使用NodeJS内置的fs模块简单实现这个程序如下. var fs = require('fs'); function copy(src, dst) { fs.writeFileSyn ...
- nodejs pipe实现大文件拷贝
原文: http://nqdeng.github.io/7-days-nodejs/ --------------------------------------------------------- ...
- node实现文件拷贝2
https://www.cnblogs.com/coding4/p/7495968.html 文件拷贝NodeJS 提供了基本的文件操作 API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件 ...
- node实现文件拷贝1
nodeJS对文件的复制: 一般对于小型文件的复制操作使用的是流的管道运输操作, 首先需要加载引入的文件:var fs = require('fs'); 1.同步创建文件夹 fs.mkdirSync( ...
- Linux系统下远程文件拷贝scp命令
在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...
- PC windows mobile 文件拷贝
在windows 系统中提供 RAPI.DLL,只需将RAPI.DLL中的,函数导出就可以实现文件拷贝.
- Java学习-045-目录中文件拷贝
挺晚的了,直接上码.敬请各位小主参阅,若有不足之处,敬请指正,非常感谢! 目录文件拷贝源码: /** * <strong>目录拷贝</strong><br> * & ...
- Dos命令完成文件拷贝
Dos命令初阶--文件拷贝 1.XCOPY命令 可以在cmd中录入:XCOPY /? 即可查看帮助 帮助: XCOPY Microsoft Windows [版本 6.2.9200] (c) 2012 ...
- linux或者windows下的文件拷贝
# 上代码 #!/usr/bin/env python # -*- coding:utf-8 -*- import os import shutil import tarfile base_dir ...
随机推荐
- 引擎设计跟踪(九.14.3.3) Deferred shading的一些小细节
1.ambient light 之前的shader里面, 方向光会加上ambient 的计算. 但是如果没有方向光, 就没有ambient. 这是把全局方向光改为点光源之后发现的, 因为透明物体的fo ...
- LeetCode - Min Remaining Chess Pieces
假设有一个棋盘(二维坐标系), 棋盘上摆放了一些石子(每个石子的坐标都为整数). 你可以remove一个石子, 当且仅当这个石子的同行或者同列还有其它石子. 输入是一个list of points. ...
- Java泛型相关总结(上)
最近在看<Java核心技术>泛型相关的部分,总结下. 泛型程序设计是什么? 泛型编程(generic programming)是计算机编程中的一种风格,类型通过参数指定.意味着编写的代码可 ...
- python selenium-webdriver 执行js (八)
使用python selenium 做自动化测试的时候其实我基本没有使用过执行js,只是在后来使用selenium来爬虫的时候使用到了,所以我在这里也就拿出来简单的介绍一下如何执行js. execut ...
- TCP连接异常:broken pipe 和EOF
本文介绍3种TCP连接异常的情况. 1.server端没有启动,client尝试连接 ./client dial failed: dial tcp 127.0.0.1:8080: connect: c ...
- CAST()函数可以进行数据类型的转换。
CAST()函数可以进行数据类型的转换. CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔. 以下例子均通过本人测试. 一.转换列或值 语法:cast( 列名/值 as 数据类 ...
- 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架
链接:http://blog.sina.com.cn/s/blog_13cc013b50102w94u.html
- 常用java的正则表达式
package everyDayPratise; import java.util.regex.Pattern; public class RegexExample { public static v ...
- RAMOS测速
WIN7X64-DDR31600-RAMOS测速,连续读取17GB/S,连续写入10GB/S,4K读写都是1GB/S左右.不错哦.
- TCP/IP学习20180805-数据链路层-IP选路
转,原文链接https://blog.csdn.net/wh1511995112/article/details/51474692 IP选路 什么是IP选路? IP选路,即IP寻路,就是根据路由表中的 ...