Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. package file
  2.  
  3. import (
  4. "os"
  5. "os/exec"
  6. "io"
  7. "fmt"
  8. )
  9.  
  10. func Exists(f string) bool {
  11. if _, err := os.Stat(f); err == nil {
  12. return true
  13. } else {
  14. return false
  15. }
  16. }
  17.  
  18. func Size(f string) (int, error) {
  19. v, err := os.Stat(f)
  20. if err != nil {
  21. return 0, err
  22. }
  23. return int(v.Size()), nil
  24. }
  25.  
  26. func Remove(f string) error {
  27. return os.Remove(f)
  28. }
  29.  
  30. func Move(oldpath, newpath string) error {
  31. err := os.Rename(oldpath, newpath)
  32. if err == nil {
  33. return nil
  34. }
  35. exec.Command(`mv`, oldpath, newpath).Run()
  36. if Exists(newpath) && !Exists(oldpath) {
  37. return nil
  38. }
  39. return err
  40. }
  41.  
  42. func ReadDir(dirname string) ([]os.FileInfo, error) {
  43. f, err := os.Open(dirname)
  44. if err != nil {
  45. return nil, err
  46. }
  47. lst, err := f.Readdir(-1)
  48. f.Close()
  49. if err != nil {
  50. return nil, err
  51. }
  52. return lst, nil
  53. }
  54.  
  55. func CountDir(dirname string) (int, error) {
  56. f, err := os.Open(dirname)
  57. if err != nil {
  58. return 0, err
  59. }
  60. lst, err := f.Readdir(-1)
  61. f.Close()
  62. if err != nil {
  63. return 0, err
  64. }
  65. return len(lst), nil
  66. }
  67.  
  68. func Copy(src, dst string) (err error) {
  69. sfi, err := os.Stat(src)
  70. if err != nil {
  71. return
  72. }
  73. if !sfi.Mode().IsRegular() {
  74. // cannot copy non-regular files (e.g., directories,
  75. // symlinks, devices, etc.)
  76. return fmt.Errorf("CopyFile: non-regular source file %s (%q)", sfi.Name(), sfi.Mode().String())
  77. }
  78. dfi, err := os.Stat(dst)
  79. if err != nil {
  80. if !os.IsNotExist(err) {
  81. return
  82. }
  83. } else {
  84. if !(dfi.Mode().IsRegular()) {
  85. return fmt.Errorf("CopyFile: non-regular destination file %s (%q)", dfi.Name(), dfi.Mode().String())
  86. }
  87. if os.SameFile(sfi, dfi) {
  88. return
  89. }
  90. }
  91. if err = os.Link(src, dst); err == nil {
  92. return
  93. }
  94. // copyFileContents
  95. in, err := os.Open(src)
  96. if err != nil {
  97. return
  98. }
  99. defer in.Close()
  100. out, err := os.Create(dst)
  101. if err != nil {
  102. return
  103. }
  104. defer func() {
  105. cerr := out.Close()
  106. if err == nil {
  107. err = cerr
  108. }
  109. }()
  110. if _, err = io.Copy(out, in); err != nil {
  111. return
  112. }
  113. err = out.Sync()
  114. return
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement