utils.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // utils
  2. package main
  3. import (
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "os"
  8. "os/user"
  9. "path"
  10. )
  11. type Hfile struct {
  12. name string
  13. dir string
  14. path string
  15. handle *os.File
  16. }
  17. type Tmpfile struct {
  18. path string
  19. dir string
  20. name string
  21. handle *os.File
  22. }
  23. func (f *Hfile) init() {
  24. u, err := user.Current()
  25. if err != nil {
  26. fmt.Println("Panicking!")
  27. panic(fmt.Sprintf("%v", err))
  28. }
  29. f.dir = u.HomeDir
  30. f.path = path.Join(f.dir, f.name)
  31. }
  32. func (f *Tmpfile) init() {
  33. tmpdir, err := ioutil.TempDir(os.TempDir(), f.name)
  34. if err != nil {
  35. fmt.Println("Panicking!")
  36. panic(fmt.Sprintf("%v", err))
  37. }
  38. f.dir = tmpdir
  39. f.path = path.Join(f.dir, f.name)
  40. }
  41. func (h *Hfile) Open() {
  42. fh, err := os.Open(h.path)
  43. if err != nil {
  44. fmt.Print(err)
  45. }
  46. h.handle = fh
  47. }
  48. func (h *Tmpfile) Open() {
  49. fh, err := os.OpenFile(h.path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600)
  50. if err != nil {
  51. fmt.Print(err)
  52. }
  53. h.handle = fh
  54. }
  55. func CopyFile(src, dst string) (int64, error) {
  56. sf, err := os.Open(src)
  57. if err != nil {
  58. return 0, err
  59. }
  60. defer sf.Close()
  61. df, err := os.Create(dst)
  62. if err != nil {
  63. return 0, err
  64. }
  65. df.Chmod(0600)
  66. defer df.Close()
  67. return io.Copy(df, sf)
  68. }