gopkg.in/essentialkaos/ek.v3@v3.5.1/fsutil/file.go (about) 1 package fsutil 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2009-2016 Essential Kaos // 6 // Essential Kaos Open Source License <http://essentialkaos.com/ekol?en> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "bufio" 12 "errors" 13 "io" 14 "os" 15 "path" 16 ) 17 18 // ////////////////////////////////////////////////////////////////////////////////// // 19 20 // CopyFile simple file copying with bufio 21 func CopyFile(from, to string, perms ...os.FileMode) error { 22 dir := path.Dir(to) 23 24 switch { 25 case IsExist(from) == false: 26 return errors.New("File " + from + " is not exists") 27 case IsRegular(from) == false: 28 return errors.New("File " + from + " is not a regular file") 29 case IsReadable(from) == false: 30 return errors.New("File " + from + " is not readable") 31 case IsExist(dir) == false: 32 return errors.New("Directory " + from + " is not exists") 33 case IsWritable(dir) == false: 34 return errors.New("Directory " + from + " is not writable") 35 } 36 37 if IsExist(to) { 38 os.Remove(to) 39 } 40 41 var perm os.FileMode = 0644 42 43 if len(perms) != 0 { 44 perm = perms[0] 45 } 46 47 ffd, err := os.OpenFile(from, os.O_RDONLY, 0644) 48 49 if err != nil { 50 return err 51 } 52 53 defer ffd.Close() 54 55 tfd, err := os.OpenFile(to, os.O_CREATE|os.O_WRONLY, perm) 56 57 if err != nil { 58 return err 59 } 60 61 defer tfd.Close() 62 63 reader := bufio.NewReader(ffd) 64 65 _, err = io.Copy(tfd, reader) 66 67 return err 68 } 69 70 // MoveFile move file 71 func MoveFile(from, to string, perms ...os.FileMode) error { 72 err := os.Rename(from, to) 73 74 if err != nil { 75 return err 76 } 77 78 if len(perms) == 0 { 79 return nil 80 } 81 82 return os.Chmod(to, perms[0]) 83 }