fs.writev(fd, buffers[, position], callback)
#
-
fd
<integer> -
buffers
<ArrayBufferView[]> -
position
<integer> -
callback
<Function>-
err
<Error> -
bytesWritten
<integer> -
buffers
<ArrayBufferView[]>
-
使用 writev()
将一个 ArrayBufferView
数组写入 fd
指定的文件。
position
指定文件开头的偏移量(数据要被写入的位置)。 如果 typeof position !== 'number'
,则数据会被写入当前的位置。
回调有三个参数:err
、 bytesWritten
和 buffers
。 bytesWritten
是从 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
网友评论