2014-05-07 13:06:24 +08:00
|
|
|
package lea
|
|
|
|
|
|
|
|
import (
|
2014-09-19 17:18:53 +08:00
|
|
|
"io"
|
2014-11-09 16:24:19 +08:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
2014-05-07 13:06:24 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
// 分离文件名与扩展名(包含.)
|
|
|
|
func SplitFilename(filename string) (baseName, ext string) {
|
|
|
|
baseName = filename
|
|
|
|
// 找到最后一个'.'
|
|
|
|
ext = SubstringByte(filename, strings.LastIndex(filename, "."))
|
|
|
|
baseName = strings.TrimRight(filename, ext)
|
|
|
|
ext = strings.ToLower(ext)
|
2014-11-09 16:24:19 +08:00
|
|
|
return
|
2014-05-07 13:06:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// 转换文件的格式
|
|
|
|
// toExt包含.
|
|
|
|
func TransferExt(path string, toExt string) string {
|
2014-11-09 16:24:19 +08:00
|
|
|
dir := filepath.Dir(path) + "/" // 文件路径
|
|
|
|
name := filepath.Base(path) // 文件名 a.jpg
|
2014-05-07 13:06:24 +08:00
|
|
|
// 获取文件名与路径
|
|
|
|
baseName, _ := SplitFilename(name)
|
|
|
|
return dir + baseName + toExt
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetFilename(path string) string {
|
|
|
|
return filepath.Base(path)
|
|
|
|
}
|
|
|
|
|
2014-06-28 23:07:34 +08:00
|
|
|
// file size
|
|
|
|
// length in bytes
|
|
|
|
func GetFilesize(path string) int64 {
|
|
|
|
fileinfo, err := os.Stat(path)
|
|
|
|
if err == nil {
|
|
|
|
return fileinfo.Size()
|
|
|
|
}
|
2014-11-09 16:24:19 +08:00
|
|
|
return 0
|
2014-06-28 23:07:34 +08:00
|
|
|
}
|
|
|
|
|
2014-05-07 13:06:24 +08:00
|
|
|
// 清空dir下所有的文件和文件夹
|
|
|
|
// RemoveAll会清空本文件夹, 所以还要创建之
|
|
|
|
func ClearDir(dir string) bool {
|
|
|
|
err := os.RemoveAll(dir)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
err = os.MkdirAll(dir, 0777)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
2014-06-28 23:07:34 +08:00
|
|
|
}
|
|
|
|
|
2015-06-15 18:01:48 +08:00
|
|
|
func MkdirAll(dir string) bool {
|
|
|
|
err := os.MkdirAll(dir, 0777)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2014-06-28 23:07:34 +08:00
|
|
|
// list dir's all file, return filenames
|
|
|
|
func ListDir(dir string) []string {
|
|
|
|
f, err := os.Open(dir)
|
|
|
|
if err != nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
names, _ := f.Readdirnames(0)
|
|
|
|
return names
|
2014-09-19 17:18:53 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func CopyFile(srcName, dstName string) (written int64, err error) {
|
|
|
|
src, err := os.Open(srcName)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
defer src.Close()
|
|
|
|
dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
defer dst.Close()
|
|
|
|
return io.Copy(dst, src)
|
2014-10-22 16:20:45 +08:00
|
|
|
}
|
|
|
|
|
2014-11-09 16:24:19 +08:00
|
|
|
func CopyDir(source string, dest string) (err error) {
|
|
|
|
// get properties of source dir
|
|
|
|
sourceinfo, err := os.Stat(source)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// create dest dir
|
|
|
|
|
|
|
|
err = os.MkdirAll(dest, sourceinfo.Mode())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
directory, _ := os.Open(source)
|
|
|
|
|
|
|
|
objects, err := directory.Readdir(-1)
|
|
|
|
|
|
|
|
for _, obj := range objects {
|
|
|
|
|
|
|
|
sourcefilepointer := source + "/" + obj.Name()
|
|
|
|
|
|
|
|
destinationfilepointer := dest + "/" + obj.Name()
|
|
|
|
|
|
|
|
if obj.IsDir() {
|
|
|
|
// create sub-directories - recursively
|
|
|
|
err = CopyDir(sourcefilepointer, destinationfilepointer)
|
|
|
|
if err != nil {
|
2015-11-13 17:58:41 +08:00
|
|
|
// fmt.Println(err)
|
2014-11-09 16:24:19 +08:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// perform copy
|
|
|
|
_, err = CopyFile(sourcefilepointer, destinationfilepointer)
|
|
|
|
if err != nil {
|
2015-11-13 17:58:41 +08:00
|
|
|
// fmt.Println(err)
|
2014-11-09 16:24:19 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func DeleteFile(path string) bool {
|
|
|
|
err := os.Remove(path)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2014-10-22 16:20:45 +08:00
|
|
|
func IsDirExists(path string) bool {
|
2014-11-09 16:24:19 +08:00
|
|
|
fi, err := os.Stat(path)
|
|
|
|
if err != nil {
|
|
|
|
return os.IsExist(err)
|
|
|
|
} else {
|
|
|
|
return fi.IsDir()
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获得文件str内容
|
|
|
|
func GetFileStrContent(path string) string {
|
|
|
|
fileBytes, err := ioutil.ReadFile(path)
|
|
|
|
if err != nil {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
return string(fileBytes)
|
|
|
|
}
|
|
|
|
|
|
|
|
func IsFileExist(filename string) bool {
|
|
|
|
var exist = true
|
|
|
|
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
|
|
|
exist = false
|
|
|
|
}
|
|
|
|
return exist
|
|
|
|
}
|
|
|
|
|
|
|
|
// 写入string内容
|
|
|
|
func PutFileStrContent(path, content string) bool {
|
|
|
|
var f *os.File
|
|
|
|
var err1 error
|
|
|
|
defer (func() {
|
|
|
|
if f != nil {
|
|
|
|
f.Close()
|
|
|
|
}
|
|
|
|
})()
|
|
|
|
f, err1 = os.OpenFile(path, os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0666) //打开文件
|
|
|
|
// Log(err1)
|
|
|
|
// var n int
|
|
|
|
_, err1 = io.WriteString(f, content) //写入文件(字符串)
|
|
|
|
// Log(content)
|
|
|
|
// Log(err1)
|
|
|
|
// Log(n)
|
|
|
|
// Log(path)
|
|
|
|
|
|
|
|
if err1 != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|