nodejs 实现文件拷贝
生活随笔
收集整理的這篇文章主要介紹了
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 = 0var totalSize = 0const stat = fs.stat(url, (err , stats) => {totalSize = stats.size})readable.on('open', () => {console.log('打開文件');})readable.on('data', data => {size = data.length + sizeconsole.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 = 0var totalSize = 0const 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 兩個方法
轉載于:https://www.cnblogs.com/xiaoliwang/p/10095623.html
總結
以上是生活随笔為你收集整理的nodejs 实现文件拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南京信息工程大学c语言实验十报告,南京信
- 下一篇: 用c语言实现蚂蚁算法,rsa算法的c语言