fs.write(fd, string[, position[, encoding]], callback)
fd
<integer>string
<string> | <Object>position
<integer> | <null> 默认值:null
encoding
<string> 默认值:'utf8'
callback
<Function>
将 string
写入 fd
指定的文件。
如果 string
不是字符串,或者不是具有自有的 toString
函数属性的对象,则会抛出异常。
position
指从文件开头数据应被写入的偏移量。
如果 typeof position !== 'number'
,则数据将写入当前位置。
参见 pwrite(2)
。
encoding
是预期的字符串编码。
回调将接收参数 (err, written, string)
,其中 written
指定传入的字符串需要被写入的字节数。
写入的字节数不一定与写入的字符串字符数相同。
参见 Buffer.byteLength
。
在同一个文件上多次使用 fs.write()
而不等待回调是不安全的。
对于这种情况,建议使用 fs.createWriteStream()
。
在 Linux 上,以追加模式打开文件时,位置写入不起作用。 内核会忽略位置参数,并始终将数据追加到文件末尾。
在 Windows 上,如果文件描述符连接到控制台(例如 fd == 1
或 stdout
),则默认情况下无论使用何种编码,都无法正确呈现包含非 ASCII 字符的字符串。
通过使用 chcp 65001
命令更改激活的代码页,可以将控制台配置为可正确呈现 UTF-8。
有关更多详细信息,请参阅 chcp 文档。
fd
<integer>string
<string> | <Object>position
<integer> | <null> Default:null
encoding
<string> Default:'utf8'
callback
<Function>
Write string
to the file specified by fd
. If string
is not a string, or an
object with an own toString
function property, then an exception is thrown.
position
refers to the offset from the beginning of the file where this data
should be written. If typeof position !== 'number'
the data will be written at
the current position. See pwrite(2)
.
encoding
is the expected string encoding.
The callback will receive the arguments (err, written, string)
where written
specifies how many bytes the passed string required to be written. Bytes
written is not necessarily the same as string characters written. See
Buffer.byteLength
.
It is unsafe to use fs.write()
multiple times on the same file without waiting
for the callback. For this scenario, fs.createWriteStream()
is
recommended.
On Linux, positional writes don't work when the file is opened in append mode. The kernel ignores the position argument and always appends the data to the end of the file.
On Windows, if the file descriptor is connected to the console (e.g. fd == 1
or stdout
) a string containing non-ASCII characters will not be rendered
properly by default, regardless of the encoding used.
It is possible to configure the console to render UTF-8 properly by changing the
active codepage with the chcp 65001
command. See the chcp docs for more
details.