日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nodejs 实现文件拷贝

發布時間:2023/12/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 实现文件拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。