猿问

如何在 Windows/Mac/Linux 中创建隐藏文件?

我构建了一个控制台应用程序,需要创建一些隐藏文件。我也知道以点开头的文件名将隐藏在 Linux 和 mac 中,但是 Windows?

设置文件属性?

有没有办法在 Windows / Linux / Mac 中创建隐藏文件和目录?


Helenr
浏览 214回答 4
4回答

慕丝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
随时随地看视频慕课网APP

相关分类

Go
我要回答