我正在通过 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)连接时我们如何检测隐藏文件,远程系统可以运行任何操作系统,并且我们根据运行它的系统编译这些方法。在那种情况下我们如何检测隐藏文件?
摇曳的蔷薇
相关分类