亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

同步檢查Node.js中是否存在文件/目錄

同步檢查Node.js中是否存在文件/目錄

繁星點點滴滴 2019-07-13 16:40:05
如何同步檢查,使用Node.js文件或目錄是否存在?
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

你可以用fs.existsSync():

const fs = require("fs"); // Or `import fs from "fs";` with ESMif (fs.existsSync(path)) {
    // Do something}

它被廢棄了好幾年,但現在不再是了。從醫生那里:

請注意fs.exists()是反對的,但是fs.existsSync()不是。(回調參數為fs.exists()接受與其他Node.js回調不一致的參數。fs.existsSync()不使用回調。)

你特別要求同步檢查,但如果您可以使用異步用I/O代替檢查(通常最好用I/O),使用fs.promises.access如果你用async職能或fs.access(自exists不受歡迎)如果沒有:

async職能:

try {
    await fs.promises.access("somefile");
    // The check succeeded} catch (error) {
    // The check failed}

或者是回調:

fs.access("somefile", error => {
    if (!error) {
        // The check succeeded
    } else {
        // The check failed
    }});


查看完整回答
反對 回復 2019-07-13
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

從源代碼來看,有一個同步版本的path.exists - path.existsSync..好像是在醫生那里漏掉的。

最新情況:

path.existspath.existsSync現在棄用

fs.existsfs.existsSync也有不受歡迎..使用fs.stat()fs.access()相反。


查看完整回答
反對 回復 2019-07-13
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

使用當前推薦的API(截至2015年)(根據節點文檔),我所做的工作如下:

var fs = require('fs');function fileExists(filePath){
    try
    {
        return fs.statSync(filePath).isFile();
    }
    catch (err)
    {
        return false;
    }}

作為對EPERM問題的回應,@寬頻在評論中提出了一個很好的觀點。在許多情況下,fileExist()可能不是考慮這個問題的好方法,因為fileExist()不能真正保證布爾返回。您可以確定文件是否存在,但也可能會出現權限錯誤。權限錯誤并不一定意味著文件存在,因為您可能對包含正在檢查的文件的目錄缺乏權限。當然,在檢查文件是否存在時可能會遇到其他錯誤。

所以我上面的代碼確實是do FileExistAndDoIHaveAccessToit(),但是您的問題可能是do FileNotExistAndCouldICreateit(),這將是完全不同的邏輯(這需要考慮EPERM錯誤,等等)。

雖然fs.352 sSync的答案直接回答了這里提出的問題,但這往往不是您想要的問題(您不只是想知道路徑上是否存在“某事”,您可能關心的是存在的“東西”是文件還是目錄)。

底線是,如果您正在檢查某個文件是否存在,您可能會這樣做,因為您打算根據結果采取一些操作,并且這種邏輯(檢查和/或后續操作)應該適應這樣的想法,即在該路徑上找到的東西可能是文件或目錄,并且在檢查過程中可能會遇到EPERM或其他錯誤。


查看完整回答
反對 回復 2019-07-13
  • 3 回答
  • 0 關注
  • 2842 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號