readdir_windows.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package godirwalk
  2. import (
  3. "os"
  4. "github.com/pkg/errors"
  5. )
  6. // The functions in this file are mere wrappers of what is already provided by
  7. // standard library, in order to provide the same API as this library provides.
  8. //
  9. // The scratch buffer argument is ignored by this architecture.
  10. //
  11. // Please send PR or link to article if you know of a more performant way of
  12. // enumerating directory contents and mode types on Windows.
  13. func readdirents(osDirname string, _ []byte) (Dirents, error) {
  14. dh, err := os.Open(osDirname)
  15. if err != nil {
  16. return nil, errors.Wrap(err, "cannot Open")
  17. }
  18. fileinfos, err := dh.Readdir(0)
  19. if er := dh.Close(); err == nil {
  20. err = er
  21. }
  22. if err != nil {
  23. return nil, errors.Wrap(err, "cannot Readdir")
  24. }
  25. entries := make(Dirents, len(fileinfos))
  26. for i, info := range fileinfos {
  27. entries[i] = &Dirent{name: info.Name(), modeType: info.Mode() & os.ModeType}
  28. }
  29. return entries, nil
  30. }
  31. func readdirnames(osDirname string, _ []byte) ([]string, error) {
  32. dh, err := os.Open(osDirname)
  33. if err != nil {
  34. return nil, errors.Wrap(err, "cannot Open")
  35. }
  36. entries, err := dh.Readdirnames(0)
  37. if er := dh.Close(); err == nil {
  38. err = er
  39. }
  40. if err != nil {
  41. return nil, errors.Wrap(err, "cannot Readdirnames")
  42. }
  43. return entries, nil
  44. }