file.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 FileSeekerFunc func(path string) (io.ReadSeekCloser, error)
  9. type FileReaderFunc func(path string) (io.ReadCloser, error)
  10. type FileWriterFunc func(path string) (io.WriteCloser, error)
  11. var NewFileSeeker FileSeekerFunc = func(path string) (io.ReadSeekCloser, error) {
  12. return os.Open(path)
  13. }
  14. var NewFileReader FileReaderFunc = func(path string) (io.ReadCloser, error) {
  15. return os.Open(path)
  16. }
  17. var NewFileWriter FileWriterFunc = func(path string) (io.WriteCloser, error) {
  18. return os.Create(path)
  19. }
  20. func ReadFile(path string) ([]byte, error) {
  21. reader, err := NewFileReader(path)
  22. if err != nil {
  23. return nil, err
  24. }
  25. defer reader.Close()
  26. return buf.ReadAllToBytes(reader)
  27. }
  28. func WriteFile(path string, payload []byte) error {
  29. writer, err := NewFileWriter(path)
  30. if err != nil {
  31. return err
  32. }
  33. defer writer.Close()
  34. return buf.WriteAllBytes(writer, payload)
  35. }
  36. func ReadAsset(file string) ([]byte, error) {
  37. return ReadFile(platform.GetAssetLocation(file))
  38. }
  39. func CopyFile(dst string, src string) error {
  40. bytes, err := ReadFile(src)
  41. if err != nil {
  42. return err
  43. }
  44. f, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0o644)
  45. if err != nil {
  46. return err
  47. }
  48. defer f.Close()
  49. _, err = f.Write(bytes)
  50. return err
  51. }