我閱讀手冊stat
方法here和它說:爲什麼使用FSTAT不建議
使用fs.stat()來檢查文件是否存在調用 fs.open(前),不建議使用fs.readFile()或fs.writeFile()。 而是,用戶代碼應該直接打開/讀取/寫入文件,並處理文件不可用時引發的錯誤 。
要檢查一個文件是否存在而未經過處理, 建議使用fs.access()。
所以,我有兩個問題:
爲什麼使用錯誤處理程序優先的方式在
fs.stat()
檢查文件是否存在?而且由於我可以用
fs.access()
來檢查文件是否存在,是否使用error handler
機制仍然是首選的方法來確保文件是否打開?
我想我已經找到了答案,第二個問題:
使用fs.access()來檢查文件的可訪問性 之前調用fs.open(),FS。不建議使用readFile()或fs.writeFile()。 這樣做會引入爭用條件,因爲其他進程可能會在兩次調用之間更改文件的狀態。相反,如果 文件不可訪問,用戶代碼應該直接打開/讀取/寫入文件並處理髮生的錯誤 。
所以可能fs.open()
阻止文件的其他進程,而fs.stat()
和fs.access()
簡單地請求信息和其他進程仍然可以修改/刪除文件。
除非這些文檔的作者已經解釋了爲什麼某處(因爲他們認爲不需要在文檔中解釋它),所有人都可以做的是推測,這在SO上並不真正有用。例如,有一種推測是,它的工作量較少,比如fs。stat'必須獲得關於該文件的更多信息。但... –
另外:你的問題是關於*第二段引用的段落,對嗎?第一個引用的段落與'fs.access'沒有任何關係(並且清楚地說明了*建議的原因)。 –
[有用的評論](http://stackoverflow.com/questions/32748530/on-linux-is-access-faster-than-stat#comment53341880_32748530) – robertklep