-
慕丝7291255
视窗:SetFileAttributesW 函数设置文件或目录的属性。FILE_ATTRIBUTE_HIDDEN 2 (0x2)文件或目录被隐藏。它不包含在普通目录列表中。去:包系统调用函数 SetFileAttributesfunc SetFileAttributes(name *uint16, attrs uint32) (err error)从 Go UTF-8 编码字符串 ( string) 转换为 Windows UTF-16 编码字符串指针 ( *uint16)。包系统调用函数 UTF16PtrFromStringfunc UTF16PtrFromString(s string) (*uint16, error)UTF16PtrFromString 返回指向 UTF-8 字符串 s 的 UTF-16 编码的指针,并添加了终止 NUL。如果 s 在任何位置包含 NUL 字节,则返回 (nil, EINVAL)。使用操作系统构建约束。例如,hide/attrib.go:package mainimport ( "fmt" "io/ioutil" "os")func main() { filename := `test.hidden.file` os.Remove(filename) os.Remove("." + filename) err := ioutil.WriteFile(filename, []byte(filename), 0666) if err != nil { fmt.Fprintln(os.Stderr, err) return } err = HideFile(filename) if err != nil { fmt.Fprintln(os.Stderr, err) return } fmt.Println("hidden:", filename)}hide/hide.go:// +build !windowspackage mainimport ( "os" "path/filepath" "strings")func HideFile(filename string) error { if !strings.HasPrefix(filepath.Base(filename), ".") { err := os.Rename(filename, "."+filename) if err != nil { return err } } return nil}hide/hide_windows.go:// +build windowspackage mainimport ( "syscall")func HideFile(filename string) error { filenameW, err := syscall.UTF16PtrFromString(filename) if err != nil { return err } err = syscall.SetFileAttributes(filenameW, syscall.FILE_ATTRIBUTE_HIDDEN) if err != nil { return err } return nil}输出(Linux):$ tree hidehide├── attrib.go├── hide.go└── hide_windows.go$$ go build && ./hidehidden: test.hidden.file$ ls -a .test.hidden.file.test.hidden.file$ 输出(视窗):>go build && hidehidden: test.hidden.file>attrib test.hidden.fileA H \test.hidden.file>
-
千万里不及你
制作一个这样的文件://go:generate mkwinsyscall -output zhide.go hide.go//sys setFileAttributes(name string, attr int) (err error) = kernel32.SetFileAttributesWpackage mainconst ( file_attribute_hidden = 2 file_attribute_normal = 128)func main() { setFileAttributes("file.txt", file_attribute_hidden)}然后构建:go mod init hidego mod tidygo generatego build
-
杨__羊羊
我为此制作了一个跨平台模块(可在此处获得:higgs)。您只需调用或Hide函数即可隐藏或取消隐藏文件或目录Unhide。示例代码:package mainimport ( "fmt" "github.com/dastoori/higgs")func main() { err := higgs.Hide("foo.txt") if err != nil { fmt.Println(err) }}
-
胡子哥哥
import ( _ "golang.org/x/sys/windows" "os" "runtime" "syscall")func HideFile(filename string) (status bool, err error) { if runtime.GOOS == "windows" { filenameW, err := syscall.UTF16PtrFromString(filename) if err != nil { return false, err } err = syscall.SetFileAttributes(filenameW, syscall.FILE_ATTRIBUTE_HIDDEN) if err != nil { return false, err } } else { if filename[0:1] != "." { err = os.Rename(filename, "." + filename) if err != nil { return false, err } } } return true, nil}那是我的代码。但是无法在Linux中构建。错误:src/util/hidden.go:12:21: undefined: syscall.UTF16PtrFromStringsrc/util/hidden.go:17:9: undefined: syscall.SetFileAttributessrc/util/hidden.go:17:46: undefined: syscall.FILE_ATTRIBUTE_HIDDEN