fileUtil.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package hybridBackup
  2. import (
  3. "errors"
  4. "io"
  5. "os"
  6. )
  7. func BufferedLargeFileCopy(src string, dst string, BUFFERSIZE int64) error {
  8. sourceFileStat, err := os.Stat(src)
  9. if err != nil {
  10. return err
  11. }
  12. if !sourceFileStat.Mode().IsRegular() {
  13. return errors.New("Invalid file source")
  14. }
  15. source, err := os.Open(src)
  16. if err != nil {
  17. return err
  18. }
  19. destination, err := os.Create(dst)
  20. if err != nil {
  21. return err
  22. }
  23. buf := make([]byte, BUFFERSIZE)
  24. for {
  25. n, err := source.Read(buf)
  26. if err != nil && err != io.EOF {
  27. source.Close()
  28. destination.Close()
  29. return err
  30. }
  31. if n == 0 {
  32. source.Close()
  33. destination.Close()
  34. break
  35. }
  36. if _, err := destination.Write(buf[:n]); err != nil {
  37. source.Close()
  38. destination.Close()
  39. return err
  40. }
  41. }
  42. return nil
  43. }
  44. //Get the last modification tiem of a given file
  45. func lastModTime(filename string) int64 {
  46. file, err := os.Stat(filename)
  47. if err != nil {
  48. return 0
  49. }
  50. modifiedtime := file.ModTime()
  51. return modifiedtime.Unix()
  52. }
  53. func isDir(filename string) bool {
  54. file, err := os.Open(filename)
  55. if err != nil {
  56. return false
  57. }
  58. fileInfo, err := file.Stat()
  59. if err != nil {
  60. return false
  61. }
  62. return fileInfo.IsDir()
  63. }
  64. func fileSize(filename string) int64 {
  65. fi, err := os.Stat("/path/to/file")
  66. if err != nil {
  67. return -1
  68. }
  69. // get the size
  70. size := fi.Size()
  71. return size
  72. }