longpath.go 496 B

123456789101112131415161718192021222324
  1. package longpath
  2. import (
  3. "path/filepath"
  4. "strings"
  5. )
  6. // LongAbs makes a path absolute and returns it in NT long path form.
  7. func LongAbs(path string) (string, error) {
  8. if strings.HasPrefix(path, `\\?\`) || strings.HasPrefix(path, `\\.\`) {
  9. return path, nil
  10. }
  11. if !filepath.IsAbs(path) {
  12. absPath, err := filepath.Abs(path)
  13. if err != nil {
  14. return "", err
  15. }
  16. path = absPath
  17. }
  18. if strings.HasPrefix(path, `\\`) {
  19. return `\\?\UNC\` + path[2:], nil
  20. }
  21. return `\\?\` + path, nil
  22. }