file.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package filesystem
  2. import (
  3. "io"
  4. "os"
  5. "github.com/v2fly/v2ray-core/v4/common/buf"
  6. "github.com/v2fly/v2ray-core/v4/common/platform"
  7. )
  8. type FileReaderFunc func(path string) (io.ReadCloser, error)
  9. type FileWriterFunc func(path string) (io.WriteCloser, error)
  10. var NewFileReader FileReaderFunc = func(path string) (io.ReadCloser, error) {
  11. return os.Open(path)
  12. }
  13. var NewFileWriter FileWriterFunc = func(path string) (io.WriteCloser, error) {
  14. return os.Create(path)
  15. }
  16. func ReadFile(path string) ([]byte, error) {
  17. reader, err := NewFileReader(path)
  18. if err != nil {
  19. return nil, err
  20. }
  21. defer reader.Close()
  22. return buf.ReadAllToBytes(reader)
  23. }
  24. func WriteFile(path string, payload []byte) error {
  25. writer, err := NewFileWriter(path)
  26. if err != nil {
  27. return err
  28. }
  29. defer writer.Close()
  30. return buf.WriteAllBytes(writer, payload)
  31. }
  32. func ReadAsset(file string) ([]byte, error) {
  33. return ReadFile(platform.GetAssetLocation(file))
  34. }
  35. func CopyFile(dst string, src string) error {
  36. bytes, err := ReadFile(src)
  37. if err != nil {
  38. return err
  39. }
  40. f, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0644)
  41. if err != nil {
  42. return err
  43. }
  44. defer f.Close()
  45. _, err = f.Write(bytes)
  46. return err
  47. }