为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 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 关注
  • 513 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号