美文网首页
fs模块-fs.wirtev的使用

fs模块-fs.wirtev的使用

作者: 静昕妈妈芦培培 | 来源:发表于2021-03-05 17:51 被阅读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

    相关文章

      网友评论

          本文标题:fs模块-fs.wirtev的使用

          本文链接:https://www.haomeiwen.com/subject/jmjkqltx.html