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

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

在 Go (Golang) 中查找文件系統對象

在 Go (Golang) 中查找文件系統對象

Go
慕碼人8056858 2022-10-10 15:36:36
我正在嘗試使用 Go 查找匹配的文件系統對象并確定我作為輸入接收到的路徑類型。具體來說,如果對象與提供的路徑匹配,我需要對對象執行操作。路徑的示例輸入可能如下所示:/path/to/filename.ext/path/to/dirname/path/to/*.txt我需要知道路徑是否存在,是文件、目錄還是正則表達式,以便我可以相應地處理輸入。這是我到目前為止設計的解決方案:func getPathType(path string) (bool, string, error) {    cpath := filepath.Clean(path)    l, err := filepath.Glob(cpath)    if err != nil {        return false, "", err    }    switch len(l) {    case 0:        return false, "", nil    case 1:        fsstat, fserr := os.Stat(cpath)        if fserr != nil {            return false, "", fserr        }        if fsstat.IsDir() {            return true, "dir", nil        }        return true, "file", nil    default:        return false, "regex", nil    }}我意識到上面的代碼將允許將返回單個值的正則表達式解釋為目錄或文件,而不是正則表達式。出于我的目的,我可以放開這張幻燈片,但只是好奇是否有人開發了一種更好的方法來采用可能包含正則表達式作為輸入的路徑并確定最后一個元素是否是正則表達式。
查看完整描述

1 回答

?
慕容3067478

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

測試 glob 特殊字符以確定路徑是否為 glob 模式。使用 filepath.Match 檢查有效的 glob 模式語法。


func getPathType(path string) (bool, string, error) {

    cpath := filepath.Clean(path)


    // Use Match to check glob syntax.

    if _, err := filepath.Match(cpath, ""); err != nil {

        return false, "", err

    }


    // If syntax is good and the path includes special

    // glob characters, then it's a glob pattern.

    special := `*?[`

    if runtime.GOOS != "windows" {

        special = `*?[\`

    }

    if strings.ContainsAny(cpath, special) {

        return false, "regex", nil

    }


    fsstat, err := os.Stat(cpath)

    if os.IsNotExist(err) {

        return false, "", nil

    } else if err != nil {

        return false, "", err

    }

    if fsstat.IsDir() {

        return true, "dir", nil

    }

    return true, "file", nil

}



查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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