feat: add file visibility checks for windows (#39)

* feat: add file visibility checks for windows

* fix: fix build error

* refactor: optimize thie ishidden

---------

Co-authored-by: Hantong Chen <70561268+cxw620@users.noreply.github.com>
This commit is contained in:
Kuingsmile
2025-06-17 23:25:02 +08:00
committed by GitHub
parent 3ab309e00e
commit 7d24a5d45f
3 changed files with 36 additions and 4 deletions

View File

@ -128,11 +128,9 @@ func (d *Local) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([
}
var files []model.Obj
for _, f := range rawFiles {
if !d.ShowHidden && strings.HasPrefix(f.Name(), ".") {
continue
if d.ShowHidden || !isHidden(f, fullPath) {
files = append(files, d.FileInfoToObj(ctx, f, args.ReqPath, fullPath))
}
file := d.FileInfoToObj(ctx, f, args.ReqPath, fullPath)
files = append(files, file)
}
return files, nil
}

View File

@ -0,0 +1,12 @@
//go:build !windows
package local
import (
"io/fs"
"strings"
)
func isHidden(f fs.FileInfo, _ string) bool {
return strings.HasPrefix(f.Name(), ".")
}

View File

@ -0,0 +1,22 @@
//go:build windows
package local
import (
"io/fs"
"path/filepath"
"syscall"
)
func isHidden(f fs.FileInfo, fullPath string) bool {
filePath := filepath.Join(fullPath, f.Name())
namePtr, err := syscall.UTF16PtrFromString(filePath)
if err != nil {
return false
}
attrs, err := syscall.GetFileAttributes(namePtr)
if err != nil {
return false
}
return attrs&syscall.FILE_ATTRIBUTE_HIDDEN != 0
}