fs模块-fs.wirtev的使用

2021-03-05  本文已影响0人  静昕妈妈芦培培

fs.writev(fd, buffers[, position], callback)#

使用 writev() 将一个 ArrayBufferView 数组写入 fd 指定的文件。

position 指定文件开头的偏移量(数据要被写入的位置)。 如果 typeof position !== 'number',则数据会被写入当前的位置。

回调有三个参数:errbytesWrittenbuffersbytesWritten 是从 buffers 写入的字节数。

不等待回调就对同一个文件多次使用 fs.writev() 是不安全的。 对于这种情况,建议使用 fs.createWriteStream()

例1:如果想用Buffer数组中的所有字节修改文件内容,需要设置fs.open的参数flags设置为'r+',
此时设置fs.writev的参数position,可以设置从文件a.txt开始修改的位置


image.png
const fs = require('fs')

fs.open('./a.txt', 'r+', (err, fd) => {
    if(err) {
        console.err(err)
        return
    }

    const buffersArray = [Buffer.from('我们'), Buffer.from('一起'), Buffer.from('出发吧'),]
    fs.writev(fd, buffersArray, 21, (error, bytesWritten, buffers) => {
        if(error) {
            console.err(error)
            return
        }
        console.log('写入成功')
    })
})

执行结果:


image.png

例2:如果想把Buffer数组中的所有字节追加到文件原内容后面,需要设置fs.open的参数flags设置为'a',此时设置fs.writev的参数position无效


image.png
const fs = require('fs')

fs.open('./a.txt', 'a', (err, fd) => {
    if(err) {
        console.err(err)
        return
    }

    const buffersArray = [Buffer.from('我们'), Buffer.from('一起'), Buffer.from('出发吧'),]
    fs.writev(fd, buffersArray, (error, bytesWritten, buffers) => {
        if(error) {
            console.err(error)
            return
        }
        console.log('写入成功')
    })
})

执行结果:


image.png

例3:如果想用Buffer数组中的所有字节覆盖文件原所有内容,需要设置fs.open的参数flags设置为'w',此时设置fs.writev的参数position无效


image.png
const fs = require('fs')

fs.open('./a.txt', 'w', (err, fd) => {
    if(err) {
        console.err(err)
        return
    }

    const buffersArray = [Buffer.from('我们'), Buffer.from('一起'), Buffer.from('出发吧'),]
    fs.writev(fd, buffersArray, (error, bytesWritten, buffers) => {
        if(error) {
            console.err(error)
            return
        }
        console.log('写入成功')
    })
})

执行结果:


image.png
上一篇下一篇

猜你喜欢

热点阅读