[英]How to check file is writable (resource is not busy nor locked)
excel4node的寫入文件函數捕獲錯誤並且不會傳播給調用者。 因此,我的應用程序無法確定寫入文件是否成功。
我目前的解決方法如下:
let fs = require('fs')
try {
let filePath = 'blahblah'
fs.writeFileSync(filePath, '') // Try-catch is for this statement
excel4nodeWorkbook.write(filePath)
} catch (e) {
console.log('File save is not successful')
}
它有效,但我認為這是一種黑客行為,並且在語義上不是正確的方式。 我還測試了fs.access
和fs.accessSync
,但它們只檢查權限,而不是資源的狀態(忙/鎖定)。
是否有任何建議可以在不修改 excel4node 源代碼的情況下使其外觀和行為更好?
我認為你問錯了問題。 如果你在時間 T 檢查,然后在時間 T + 1ms 寫入,如何保證文件仍然是可寫的?
如果該文件由於某種原因不可寫,則寫入將失敗,期間。 沒事做。 您的代碼很好,但您可能也可以不用fs.writeFileSync()
,它只會擦除文件中之前的任何其他內容。
您還可以寫入隨機生成的文件路徑,以合理確保兩個進程不會同時寫入同一個文件,但同樣,這不會阻止所有可能的寫入錯誤,所以您真正想要的是而是一些很好的錯誤處理。
為了正確處理錯誤,您必須提供回調!
類似的東西:
excel4nodeWorkbook.write(filePath, (err) => {
if (err) console.error(err);
});
請注意,這是異步代碼,因此您也需要處理它!
您已經在庫的源代碼中標記了一行。 如果您查看上面的幾行,您可以看到它使用handler
參數將任何錯誤傳遞給。 事實上,查看函數上方的文檔注釋,它說:
如果給定回調,則通過 (err, fs.Stats) 調用回調
因此,您可以簡單地傳遞一個函數作為您的第二個參數並檢查err
就像您可能已經在節點環境中的其他地方看到的一樣:
excel4nodeWorkbook.write(filepath, (err) => {
if (err) {
console.error(err);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.