file.go 5.1 KB
Newer Older
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
1 2 3
package fileUtils

import (
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
4 5 6
	"github.com/easysoft/zendata/res"
	commonUtils "github.com/easysoft/zendata/src/utils/common"
	constant "github.com/easysoft/zendata/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	i118Utils "github.com/easysoft/zendata/src/utils/i118"
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
8
	"github.com/easysoft/zendata/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	"github.com/fatih/color"
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
	"io/ioutil"
	"os"
	"os/exec"
	"path"
	"path/filepath"
	"strings"
)

func ReadFile(filePath string) string {
	buf := ReadFileBuf(filePath)
	str := string(buf)
	str = commonUtils.RemoveBlankLine(str)
	return str
}

func ReadFileBuf(filePath string) []byte {
	buf, err := ioutil.ReadFile(filePath)
	if err != nil {
		return []byte(err.Error())
	}

	return buf
}

func WriteFile(filePath string, content string) {
	dir := filepath.Dir(filePath)
	MkDirIfNeeded(dir)

	var d1 = []byte(content)
	err2 := ioutil.WriteFile(filePath, d1, 0666) //写入文件(字节数组)
	check(err2)
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
43 44 45 46
func RemoveExist(path string) {
	os.Remove(path)
}

aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
func check(e error) {
	if e != nil {
		panic(e)
	}
}

func FileExist(path string) bool {
	var exist = true
	if _, err := os.Stat(path); os.IsNotExist(err) {
		exist = false
	}
	return exist
}

func MkDirIfNeeded(dir string) error {
	if !FileExist(dir) {
		err := os.MkdirAll(dir, os.ModePerm)
		return err
	}

	return nil
}

func IsDir(f string) bool {
	fi, e := os.Stat(f)
	if e != nil {
		return false
	}
	return fi.IsDir()
}

func AbosutePath(pth string) string {
	if !IsAbosutePath(pth) {
		pth, _ = filepath.Abs(pth)
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
83
	pth = AddSepIfNeeded(pth)
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
84 85 86 87 88 89 90 91 92

	return pth
}

func IsAbosutePath(pth string) bool {
	return path.IsAbs(pth) ||
		strings.Index(pth, ":") == 1 // windows
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
93
func AddSepIfNeeded(pth string) string {
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
	sepa := string(os.PathSeparator)

	if strings.LastIndex(pth, sepa) < len(pth)-1 {
		pth += sepa
	}
	return pth
}

func ReadResData(path string) string {
	isRelease := commonUtils.IsRelease()

	var jsonStr string
	if isRelease {
		data, _ := res.Asset(path)
		jsonStr = string(data)
	} else {
		jsonStr = ReadFile(path)
	}

	return jsonStr
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
116
func GetExeDir() string { // where zd.exe file in
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
117 118 119 120
	var dir string
	arg1 := strings.ToLower(os.Args[0])

	name := filepath.Base(arg1)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
121
	if strings.Index(name, "zd") == 0 && strings.Index(arg1, "go-build") < 0 {
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
122 123 124 125 126 127 128 129 130
		p, _ := exec.LookPath(os.Args[0])
		if strings.Index(p, string(os.PathSeparator)) > -1 {
			dir = p[:strings.LastIndex(p, string(os.PathSeparator))]
		}
	} else { // debug
		dir, _ = os.Getwd()
	}

	dir, _ = filepath.Abs(dir)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
131
	dir = AddSepIfNeeded(dir)
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
132

aaronchen2k2k's avatar
aaronchen2k2k 已提交
133
	//fmt.Printf("Debug: Launch %s in %s \n", arg1, dir)
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
134 135 136
	return dir
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
137 138 139 140 141 142 143 144 145 146
func GetWorkDir() string { // where we run file in
	dir, _ := os.Getwd()

	dir, _ = filepath.Abs(dir)
	dir = AddSepIfNeeded(dir)

	//fmt.Printf("Debug: Launch %s in %s \n", arg1, dir)
	return dir
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
147
func GetAbsDir(path string) string {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
148 149
	abs := ""
	if !IsAbosutePath(path) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
150
		path = vari.WorkDir + path
aaronchen2k2k's avatar
aaronchen2k2k 已提交
151
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
152

aaronchen2k2k's avatar
aaronchen2k2k 已提交
153 154
	abs, _ = filepath.Abs(filepath.Dir(path))
	abs = AddSepIfNeeded(abs)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
155 156
	return abs
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
157

aaronchen2k2k's avatar
aaronchen2k2k 已提交
158
func GetResProp(from string) (resFile, resType, sheet string) { // from resource
aaronchen2k2k's avatar
aaronchen2k2k 已提交
159

aaronchen2k2k's avatar
aaronchen2k2k 已提交
160 161
	index := strings.LastIndex(from, ".yaml")
	if index > -1 { // yaml, ip.v1.yaml
aaronchen2k2k's avatar
aaronchen2k2k 已提交
162
		resFile = ConvertResYamlPath(from)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
163
		resType = "yaml"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
164
	} else { // excel, like address.cn.v1.china
aaronchen2k2k's avatar
aaronchen2k2k 已提交
165
		resFile, sheet = convertResExcelPath(from)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
166 167 168 169 170 171 172 173 174 175 176 177
		resType = "excel"
	}

	if resFile == "" {
		resPath := vari.ConfigDir + resFile
		if !FileExist(resPath) { // in same folder with passed config file

			resPath = vari.WorkDir + resFile
			if !FileExist(resPath) {  // in res file
				resPath = ""
			}
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
178
		resFile = resPath
aaronchen2k2k's avatar
aaronchen2k2k 已提交
179
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
180

aaronchen2k2k's avatar
aaronchen2k2k 已提交
181 182 183
	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
184
func ConvertResYamlPath(from string) (ret string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
185 186 187 188 189 190 191
	arr := strings.Split(from, ".")
	for i := 0; i < len(arr); i++ {
		dir := ""
		if i > 0 {
			dir = strings.Join(arr[:i], constant.PthSep)
		}
		file := strings.Join(arr[i:], ".")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
192

aaronchen2k2k's avatar
aaronchen2k2k 已提交
193
		relatPath := ""
aaronchen2k2k's avatar
aaronchen2k2k 已提交
194
		if dir != "" {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
195
			relatPath = dir + constant.PthSep + file
aaronchen2k2k's avatar
aaronchen2k2k 已提交
196
		} else {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
197
			relatPath = file
aaronchen2k2k's avatar
aaronchen2k2k 已提交
198 199
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
200 201
		realPth1 := vari.WorkDir + constant.ResDirYaml + constant.PthSep + relatPath
		realPth2 := vari.WorkDir + constant.ResDirUsers + constant.PthSep + relatPath
aaronchen2k2k's avatar
aaronchen2k2k 已提交
202 203 204 205 206 207
		if FileExist(realPth1) {
			ret = realPth1
			break
		} else if FileExist(realPth2) {
			ret = realPth2
			break
aaronchen2k2k's avatar
aaronchen2k2k 已提交
208
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
209 210
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
211 212 213 214
	if ret == "" {
		color.New(color.FgCyan).Fprintf(color.Output, i118Utils.I118Prt.Sprintf("fail_to_find_res", from) + "\n")
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
215 216
	return
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
217

aaronchen2k2k's avatar
aaronchen2k2k 已提交
218
func convertResExcelPath(from string) (ret, sheet string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
	path1 := from // address.cn.v1
	index := strings.LastIndex(from, ".")
	path2 := from[:index] // address.cn.v1.china

	paths := [2]string{path1, path2}
	for index, path := range paths {

		arr := strings.Split(path, ".")
		for i := 0; i < len(arr); i++ {
			dir := ""
			if i > 0 {
				dir = strings.Join(arr[:i], constant.PthSep)
			}
			file := strings.Join(arr[i:], ".") + ".xlsx"

aaronchen2k2k's avatar
aaronchen2k2k 已提交
234
			relatPath := ""
aaronchen2k2k's avatar
aaronchen2k2k 已提交
235
			if dir != "" {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
236
				relatPath = dir + constant.PthSep + file
aaronchen2k2k's avatar
aaronchen2k2k 已提交
237
			} else {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
238
				relatPath = file
aaronchen2k2k's avatar
aaronchen2k2k 已提交
239 240
			}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
241
			realPth := vari.WorkDir + constant.ResDirData + constant.PthSep + relatPath
aaronchen2k2k's avatar
aaronchen2k2k 已提交
242 243 244 245 246 247 248 249 250
			if FileExist(realPth) {
				if index == 1 {
					sheet = from[strings.LastIndex(from, ".")+1:]
				}
				ret = realPth
				return
			}
		}
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
251

aaronchen2k2k's avatar
aaronchen2k2k 已提交
252 253 254 255
	if ret == "" {
		color.New(color.FgCyan).Fprintf(color.Output, i118Utils.I118Prt.Sprintf("fail_to_find_res", from) + "\n")
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
256
	return
aaronchen2k2k's avatar
aaronchen2k2k 已提交
257
}