...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package sftpfs
15
16 import (
17 "os"
18
19 "github.com/pkg/sftp"
20 )
21
22 type File struct {
23 client *sftp.Client
24 fd *sftp.File
25 }
26
27 func FileOpen(s *sftp.Client, name string) (*File, error) {
28 fd, err := s.Open(name)
29 if err != nil {
30 return &File{}, err
31 }
32 return &File{fd: fd, client: s}, nil
33 }
34
35 func FileCreate(s *sftp.Client, name string) (*File, error) {
36 fd, err := s.Create(name)
37 if err != nil {
38 return &File{}, err
39 }
40 return &File{fd: fd, client: s}, nil
41 }
42
43 func (f *File) Close() error {
44 return f.fd.Close()
45 }
46
47 func (f *File) Name() string {
48 return f.fd.Name()
49 }
50
51 func (f *File) Stat() (os.FileInfo, error) {
52 return f.fd.Stat()
53 }
54
55 func (f *File) Sync() error {
56 return nil
57 }
58
59 func (f *File) Truncate(size int64) error {
60 return f.fd.Truncate(size)
61 }
62
63 func (f *File) Read(b []byte) (n int, err error) {
64 return f.fd.Read(b)
65 }
66
67 func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
68 return f.fd.ReadAt(b, off)
69 }
70
71 func (f *File) Readdir(count int) (res []os.FileInfo, err error) {
72 res, err = f.client.ReadDir(f.Name())
73 if err != nil {
74 return
75 }
76 if count > 0 {
77 if len(res) > count {
78 res = res[:count]
79 }
80 }
81 return
82 }
83
84 func (f *File) Readdirnames(n int) (names []string, err error) {
85 data, err := f.Readdir(n)
86 if err != nil {
87 return nil, err
88 }
89 for _, v := range data {
90 names = append(names, v.Name())
91 }
92 return
93 }
94
95 func (f *File) Seek(offset int64, whence int) (int64, error) {
96 return f.fd.Seek(offset, whence)
97 }
98
99 func (f *File) Write(b []byte) (n int, err error) {
100 return f.fd.Write(b)
101 }
102
103
104 func (f *File) WriteAt(b []byte, off int64) (n int, err error) {
105 return 0, nil
106 }
107
108 func (f *File) WriteString(s string) (ret int, err error) {
109 return f.fd.Write([]byte(s))
110 }
111
View as plain text