fileinfo.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package vfs
  2. import (
  3. "os"
  4. "path"
  5. "time"
  6. )
  7. // FileInfo implements os.FileInfo for a Cloud Storage file.
  8. type FileInfo struct {
  9. name string
  10. sizeInBytes int64
  11. modTime time.Time
  12. mode os.FileMode
  13. }
  14. // NewFileInfo creates file info.
  15. func NewFileInfo(name string, isDirectory bool, sizeInBytes int64, modTime time.Time, fullName bool) FileInfo {
  16. mode := os.FileMode(0644)
  17. if isDirectory {
  18. mode = os.FileMode(0755) | os.ModeDir
  19. }
  20. if !fullName {
  21. // we have always Unix style paths here
  22. name = path.Base(name)
  23. }
  24. return FileInfo{
  25. name: name,
  26. sizeInBytes: sizeInBytes,
  27. modTime: modTime,
  28. mode: mode,
  29. }
  30. }
  31. // Name provides the base name of the file.
  32. func (fi FileInfo) Name() string {
  33. return fi.name
  34. }
  35. // Size provides the length in bytes for a file.
  36. func (fi FileInfo) Size() int64 {
  37. return fi.sizeInBytes
  38. }
  39. // Mode provides the file mode bits
  40. func (fi FileInfo) Mode() os.FileMode {
  41. return fi.mode
  42. }
  43. // ModTime provides the last modification time.
  44. func (fi FileInfo) ModTime() time.Time {
  45. return fi.modTime
  46. }
  47. // IsDir provides the abbreviation for Mode().IsDir()
  48. func (fi FileInfo) IsDir() bool {
  49. return fi.mode&os.ModeDir != 0
  50. }
  51. // Sys provides the underlying data source (can return nil)
  52. func (fi FileInfo) Sys() interface{} {
  53. return fi.getFileInfoSys()
  54. }