作为node.js文档
fs.write(fd,buffer,offset,length,position,[callback])
所以我写道:
var fs = require('fs');
fs.open('./example.txt', 'a', 0666, function(err, fd) {
if (err) { throw err; }
console.log('file opened');
fs.write(fd, 'test', null, null, null, function(err) {
if (err) { throw err; }
console.log('file written');
fs.close(fd, function() {
console.log('file closed');
});
});
});
但是没有触发fs.write的回调。输出只是'文件打开'。
fs.write(fd, 'test', null, null, function(err) {
但是我为第5个参数指定了回调而不是第6个。这是有效的。 为什么不同于文档。
并且在节点源(node_file.cc)中,回调是第6个参数。
Local<Value> cb = args[5];
我不明白。
答案 0 :(得分:4)
仍然支持fs.write的旧接口。它允许写入字符串。因为你给了一个字符串而不是'Buffer'节点,试图使你的参数适合这个旧的接口:
fs.write(fd, data, position, encoding, callback)
请注意,较旧的界面将'callback'作为第5个参数。对于第五个参数,你给它'null':
fs.write(fd, 'test', null, null, null, function(err) {
节点为你的回调看到'null',所以不认为你给了节点一个回调。
使用建议的Buffer数据字符串,或正确使用旧接口使用普通字符串。如果您现在还没准备好使用Buffer,只需使用“new Buffer('test')”,直到您准备好。
答案 1 :(得分:3)
您需要将buffer而不是字符串作为第二个参数传递给fs.write。此外,回调将给出三个参数,而不是一个:
var buffer = new Buffer('test');
fs.write(fd, buffer, 0, buffer.length, null, function(err, written, buffer) {
fs.write(fd,buffer,offset,length,position,[callback])
将缓冲区写入fd。
指定的文件offset和length确定要写入的缓冲区部分。
position指的是应该写入此数据的文件开头的偏移量。如果position为null,则数据将写入当前位置。见pwrite(2)。
回调将被赋予三个参数(错误,写入,缓冲),其中written指定从缓冲区写入的字节数。
最后,对fs.open的调用中的'0666'表示UNIX file mode。