2011-10-08 68 views
2

作爲文件的node.js回調fs.write不工作作爲文件

fs.write(FD,緩衝器,偏移,長度,位置,[回調])

所以我寫如:

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

和fs.open中的0666是什麼意思? – Outsider

回答

4

fs.write的舊接口仍然受支持。它允許寫入字符串。因爲你給了一個字符串,而不是一個「緩衝」節點試圖讓你的論點符合這種舊的接口:

fs.write(fd, data, position, encoding, callback) 

注意,舊的接口有「回調」爲公司第五屆參數。對於第五個參數,你給它「空」:

fs.write(fd, 'test', null, null, null, function(err) { 

節點看到「空」爲你的回調,因此沒想到你給點回調。

按照建議使用緩衝區數據字符串,或者正確使用舊接口來使用普通字符串。如果您現在還沒有準備好使用Buffer,只需使用「新緩衝區('test')」,直到您準備就緒。

3

您需要傳遞一個buffer,而不是將字符串作爲fs.write的第二個參數。此外,回調將給出三個參數,而不是一個:

var buffer = new Buffer('test'); 
fs.write(fd, buffer, 0, buffer.length, null, function(err, written, buffer) { 

documentation

fs.write(FD,緩衝器,偏移,長度,位置,[回調])

將緩衝區寫入由fd指定的文件。

偏移量和長度決定要寫入的緩衝區的部分。

位置是指應該寫入數據的文件開頭的偏移量。如果position爲null,則數據將寫入當前位置。參見pwrite(2)。

回調將被賦予三個參數(err,written,buffer),其中寫入指定從緩衝區中寫入了多少個字節。

最後,在調用fs.open中'0666'代表UNIX file mode