程序怎么判断windows的隐藏文件/文件夹?

拿到一个路径,怎么判断这个路径是不是一个隐藏文件或者文件夹呢?有没有好的办法?

已邀请:

stevewang

赞同来自: voidint

在windows下:

import (
    "syscall"
    "unicode/utf16"
    "unsafe"
)

func IsFileHidden(path string) (bool, error) {
    name := utf16.Encode([]rune(path))
    attributes, err := syscall.GetFileAttributes((*uint16)(unsafe.Pointer(&name[0])))
    if err != nil {
        return false, err
    }
    return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil
}

stevewang

赞同来自: voidint

上面那个程序有点问题,因为windows下utf16字符串应该是以0结尾的。 所以正确的版本是:

import (
    "syscall"
    "unsafe"
)

func IsFileHidden(path string) (bool, error) {
    name := syscall.StringToUTF16(path)
    attributes, err := syscall.GetFileAttributes((*uint16)(unsafe.Pointer(&name[0])))
    if err != nil {
        return false, err
    }
    return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil
}

或者

import (
    "syscall"
    "unicode/utf16"
    "unsafe"
)

func IsFileHidden(path string) (bool, error) {
    name := utf16.Encode([]rune(path + "\x00"))
    attributes, err := syscall.GetFileAttributes((*uint16)(unsafe.Pointer(&name[0])))
    if err != nil {
        return false, err
    }
    return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil
}

要回复问题请先登录注册