file.go 940 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package filesystem
  2. import (
  3. "io"
  4. "os"
  5. "path/filepath"
  6. "github.com/xtls/xray-core/common/buf"
  7. "github.com/xtls/xray-core/common/platform"
  8. )
  9. type FileReaderFunc func(path string) (io.ReadCloser, error)
  10. var NewFileReader FileReaderFunc = func(path string) (io.ReadCloser, error) {
  11. resolved_path,err:=filepath.EvalSymlinks(path)
  12. if err!= nil{
  13. return nil,err
  14. }
  15. return os.Open(resolved_path)
  16. }
  17. func ReadFile(path string) ([]byte, error) {
  18. reader, err := NewFileReader(path)
  19. if err != nil {
  20. return nil, err
  21. }
  22. defer reader.Close()
  23. return buf.ReadAllToBytes(reader)
  24. }
  25. func ReadAsset(file string) ([]byte, error) {
  26. return ReadFile(platform.GetAssetLocation(file))
  27. }
  28. func CopyFile(dst string, src string) error {
  29. bytes, err := ReadFile(src)
  30. if err != nil {
  31. return err
  32. }
  33. f, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0o644)
  34. if err != nil {
  35. return err
  36. }
  37. defer f.Close()
  38. _, err = f.Write(bytes)
  39. return err
  40. }