directory_windows.go 672 B

12345678910111213141516171819202122232425262728293031323334353637
  1. // +build windows
  2. package directory
  3. import (
  4. "os"
  5. "path/filepath"
  6. )
  7. // Size walks a directory tree and returns its total size in bytes.
  8. func Size(dir string) (size int64, err error) {
  9. err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, err error) error {
  10. if err != nil {
  11. // if dir does not exist, Size() returns the error.
  12. // if dir/x disappeared while walking, Size() ignores dir/x.
  13. if os.IsNotExist(err) && d != dir {
  14. return nil
  15. }
  16. return err
  17. }
  18. // Ignore directory sizes
  19. if fileInfo == nil {
  20. return nil
  21. }
  22. s := fileInfo.Size()
  23. if fileInfo.IsDir() || s == 0 {
  24. return nil
  25. }
  26. size += s
  27. return nil
  28. })
  29. return
  30. }