readdir_windows.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // +build windows
  2. package godirwalk
  3. import "os"
  4. // MinimumScratchBufferSize specifies the minimum size of the scratch buffer
  5. // that ReadDirents, ReadDirnames, Scanner, and Walk will use when reading file
  6. // entries from the operating system. During program startup it is initialized
  7. // to the result from calling `os.Getpagesize()` for non Windows environments,
  8. // and 0 for Windows.
  9. var MinimumScratchBufferSize = 0
  10. func newScratchBuffer() []byte { return nil }
  11. func readDirents(osDirname string, _ []byte) ([]*Dirent, error) {
  12. dh, err := os.Open(osDirname)
  13. if err != nil {
  14. return nil, err
  15. }
  16. fileinfos, err := dh.Readdir(-1)
  17. if err != nil {
  18. _ = dh.Close()
  19. return nil, err
  20. }
  21. entries := make([]*Dirent, len(fileinfos))
  22. for i, fi := range fileinfos {
  23. entries[i] = &Dirent{
  24. name: fi.Name(),
  25. path: osDirname,
  26. modeType: fi.Mode() & os.ModeType,
  27. }
  28. }
  29. if err = dh.Close(); err != nil {
  30. return nil, err
  31. }
  32. return entries, nil
  33. }
  34. func readDirnames(osDirname string, _ []byte) ([]string, error) {
  35. dh, err := os.Open(osDirname)
  36. if err != nil {
  37. return nil, err
  38. }
  39. fileinfos, err := dh.Readdir(-1)
  40. if err != nil {
  41. _ = dh.Close()
  42. return nil, err
  43. }
  44. entries := make([]string, len(fileinfos))
  45. for i, fi := range fileinfos {
  46. entries[i] = fi.Name()
  47. }
  48. if err = dh.Close(); err != nil {
  49. return nil, err
  50. }
  51. return entries, nil
  52. }