文件操作
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
3.2 KiB

// error debug
package file
import (
"errors"
"io"
"io/ioutil"
"net/http"
"os"
//"os/exec"
"path"
"path/filepath"
//"runtime"
"log"
"strings"
)
/**
* 文件下载
* param url 要下载的文件URL
* param filename 文件保存路径(或文件保存名称)
*/
func DownloadFile(url, filename string) error {
if url == "" {
return errors.New("文件下载地址为空")
}
//判断filename是路径还是文件名
fileIndex := strings.Index(filename, ".")
var filePath string
if fileIndex < 1 { //名称是路径
index := strings.Index(url, "?")
if index > 0 {
url1 := url[0:index]
index2 := strings.LastIndex(url1, "/")
//修改此处index2为index2+1,不然多了一个多余的/
fileName := url1[index2+1:]
filePath = strings.TrimRight(filename, "/") + "/" + fileName
} else {
fileName := path.Base(url) //获取文件名带后缀
filePath = strings.TrimRight(filename, "/") + "/" + fileName
}
} else {
filePath = filename
}
res, err := http.Get(url)
if err != nil {
return err
}
dir, _ := filepath.Split(filePath)
CreatePath(dir)
file, err := os.Create(filePath)
if err != nil {
return err
}
_, copyerr := io.Copy(file, res.Body)
if copyerr != nil {
return err
}
return nil
}
/**
* 获取远程接口信息
*/
func Geturl(url string) ([]byte, error) {
resp, err := http.Get(url)
if err != nil {
return []byte(""), err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return []byte(""), err
}
return body, nil
}
/**
* 文件是否存在
*/
func FileExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
// Copy a file
func Cpfile(originalFilePath, newFilePath string) error {
// Open original file
originalFile, err := os.Open(originalFilePath)
if err != nil {
return err
}
defer originalFile.Close()
// Create new file
newFile, err := os.Create(newFilePath)
if err != nil {
return err
}
defer newFile.Close()
// Copy the bytes to destination from source
_, err = io.Copy(newFile, originalFile)
if err != nil {
return err
}
// Commit the file contents
// Flushes memory to disk
err = newFile.Sync()
if err != nil {
return err
}
return nil
}
func WriteFile(filePath, data string) error {
fileExist, err := FileExists(filePath)
if err != nil {
return err
}
var f *os.File
if fileExist { //如果文件存在
f, err = os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) //打开文件
} else {
f, err = os.Create(filePath) //创建文件
}
if err != nil {
return err
}
_, err = io.WriteString(f, data) //写入文件(字符串)
if err != nil {
return err
}
return nil
}
/**
* read file
*/
func ReadFile(path string) string {
fi, err := os.Open(path)
if err != nil {
return ""
}
defer fi.Close()
fd, err := ioutil.ReadAll(fi)
return string(fd)
}
/**
*读取文件内容(返回字符串)
*/
func GetFileContent(FilePath string) string {
buf, err := ioutil.ReadFile(FilePath)
if err != nil {
log.Println("ERROR", "read file error", FilePath, err)
return ""
}
return string(buf)
}