hide_windows.go 821 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // +build windows
  2. package hidden
  3. import (
  4. "path/filepath"
  5. "strings"
  6. "syscall"
  7. )
  8. func hide(filename string) error {
  9. filenameW, err := syscall.UTF16PtrFromString(filename)
  10. if err != nil {
  11. return err
  12. }
  13. err = syscall.SetFileAttributes(filenameW, syscall.FILE_ATTRIBUTE_HIDDEN)
  14. if err != nil {
  15. return err
  16. }
  17. return nil
  18. }
  19. func isHidden(filename string) (bool, error) {
  20. filename = filepath.ToSlash(filename)
  21. if strings.Contains(filename, "/") {
  22. filename = filepath.Base(filename)
  23. }
  24. if len(filename) > 0 && filename[0:1] == "." {
  25. return true, nil
  26. }
  27. pointer, err := syscall.UTF16PtrFromString(filename)
  28. if err != nil {
  29. return false, err
  30. }
  31. attributes, err := syscall.GetFileAttributes(pointer)
  32. if err != nil {
  33. return false, err
  34. }
  35. return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil
  36. }