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

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

如何在 Go 中檢測文件夾中的隱藏文件 - 跨平臺方法

如何在 Go 中檢測文件夾中的隱藏文件 - 跨平臺方法

Go
侃侃無極 2022-10-17 17:20:42
我正在通過 golang 中的 filePath.Walk 方法遍歷已安裝的文件夾,但它也返回隱藏文件。我必須跳過那些隱藏文件。對于 MaxOS 和 Linux,我們可以通過.文件名中的前綴檢測隱藏文件,但對于 Windows,當我嘗試使用GetFileAttributes由 提供的這種方法時"syscall",它沒有檢測到這些方法并引發錯誤。使用以下方法獲取文件   err := filepath.Walk(prefix, func(docPath string, f os.FileInfo, err error) error {以下是我嘗試檢測隱藏文件的方式import (  "runtime"  "syscall")func IsHiddenFile(filename string) (bool, error) {if runtime.GOOS == "windows" {    pointer, err := syscall.UTF16PtrFromString(filename)    if err != nil {        return false, err    }    attributes, err := syscall.GetFileAttributes(pointer)    if err != nil {        return false, err    }    return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil} else {    // unix/linux file or directory that starts with . is hidden    if filename[0:1] == "." {        return true, nil    }}return false, nil}錯誤 :.../ undefined: syscall.UTF16PtrFromString.../ undefined: syscall.GetFileAttributes.../ undefined: syscall.FILE_ATTRIBUTE_HIDDEN我// +build windows在包名稱之前的文件開頭添加了這個,如下所示:syscall variables undefined但它仍然無法正常工作并引發相同的錯誤。我需要知道 go 是否提供了一些常用方法來檢測文件是否隱藏?或者有沒有一種方法可以在不首先接收隱藏文件的情況下獲取某個已安裝目錄中的所有文件/文件夾?真的很期待在這里收到一些反饋,謝謝。編輯:修復了上述問題(請參閱下面的評論),我還想知道當我們與遠程服務器(SMB)連接時我們如何檢測隱藏文件,遠程系統可以運行任何操作系統,并且我們根據運行它的系統編譯這些方法。在那種情況下我們如何檢測隱藏文件?
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

條件編譯是正確的方法,但它適用于源文件級別,因此您需要兩個單獨的文件。


例如:


hidden_notwin.go:


// +build !windows


package main


func IsHiddenFile(filename string) (bool, error) {

    return filename[0] == '.', nil

}

hidden_windows.go:


// +build windows


package main


import (

    "syscall"

)


func IsHiddenFile(filename string) (bool, error) {

    pointer, err := syscall.UTF16PtrFromString(filename)

    if err != nil {

        return false, err

    }

    attributes, err := syscall.GetFileAttributes(pointer)

    if err != nil {

        return false, err

    }

    return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil

}

請注意,// +build windows上面的標簽是可選的——_windows源文件后綴已經很神奇了。有關更多詳細信息,請參閱如何使用 go build 工具使用條件編譯。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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