当 file
是一个文件描述符时,行为几乎与直接调用 fs.write()
类似:
fs.write(fd, Buffer.from(data, options.encoding), callback);
与直接调用 fs.write()
的区别在于,在某些异常情况下,fs.write()
可能只写入部分 buffer,需要重试以写入剩余的数据,而 fs.writeFile()
将会重试直到数据完全写入(或发生错误)。
这种影响是混淆的常见原因。 在文件描述符的情况下,文件不会被替换! 数据不一定写入到文件的开头,文件的原始数据可以保留在新写入的数据之前和/或之后。
例如,如果连续两次调用 fs.writeFile()
,首先写入字符串 'Hello'
,然后写入字符串 ', World'
,则该文件将会包含 'Hello, World'
,并且可能包含文件的一些原始数据(取决于原始文件的大小和文件描述符的位置)。
如果使用了文件名而不是描述符,则该文件将会保证仅包含 ', World'
。