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

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

如何在 Windows/Mac/Linux 中創建隱藏文件?

如何在 Windows/Mac/Linux 中創建隱藏文件?

Go
Helenr 2023-06-01 14:33:55
我構建了一個控制臺應用程序,需要創建一些隱藏文件。我也知道以點開頭的文件名將隱藏在 Linux 和 mac 中,但是 Windows?設置文件屬性?有沒有辦法在 Windows / Linux / Mac 中創建隱藏文件和目錄?
查看完整描述

4 回答

?
慕絲7291255

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

視窗:

SetFileAttributesW 函數

設置文件或目錄的屬性。

FILE_ATTRIBUTE_HIDDEN ? ?2 (0x2)

文件或目錄被隱藏。它不包含在普通目錄列表中。


去:

包系統調用

函數 SetFileAttributes

func?SetFileAttributes(name?*uint16,?attrs?uint32)?(err?error)

從 Go UTF-8 編碼字符串 (?string) 轉換為 Windows UTF-16 編碼字符串指針 (?*uint16)。

包系統調用

函數 UTF16PtrFromString

func?UTF16PtrFromString(s?string)?(*uint16,?error)

UTF16PtrFromString 返回指向 UTF-8 字符串 s 的 UTF-16 編碼的指針,并添加了終止 NUL。如果 s 在任何位置包含 NUL 字節,則返回 (nil, EINVAL)。


使用操作系統構建約束。


例如,

hide/attrib.go:

package main


import (

? ? "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 !windows


package main


import (

? ? "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 windows


package main


import (

? ? "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 hide

hide

├── attrib.go

├── hide.go

└── hide_windows.go

$


$ go build && ./hide

hidden: test.hidden.file

$ ls -a .test.hidden.file

.test.hidden.file

$?

輸出(視窗):


>go build && hide

hidden: test.hidden.file

>attrib test.hidden.file

A? ?H? ? ? ? \test.hidden.file

>


查看完整回答
反對 回復 2023-06-01
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

制作一個這樣的文件:


//go:generate mkwinsyscall -output zhide.go hide.go

//sys setFileAttributes(name string, attr int) (err error) = kernel32.SetFileAttributesW

package main


const (

   file_attribute_hidden = 2

   file_attribute_normal = 128

)


func main() {

   setFileAttributes("file.txt", file_attribute_hidden)

}

然后構建:


go mod init hide

go mod tidy

go generate

go build


查看完整回答
反對 回復 2023-06-01
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

我為此制作了一個跨平臺模塊(可在此處獲得:higgs)。您只需調用或Hide函數即可隱藏或取消隱藏文件或目錄Unhide。


示例代碼:


package main


import (

    "fmt"

    "github.com/dastoori/higgs"

)


func main() {

    err := higgs.Hide("foo.txt")

    

    if err != nil {

        fmt.Println(err)

    }

}


查看完整回答
反對 回復 2023-06-01
?
胡子哥哥

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

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.UTF16PtrFromString

src/util/hidden.go:17:9: undefined: syscall.SetFileAttributes

src/util/hidden.go:17:46: undefined: syscall.FILE_ATTRIBUTE_HIDDEN


查看完整回答
反對 回復 2023-06-01
  • 4 回答
  • 0 關注
  • 286 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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