123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package file
- import (
- "bufio"
- "fmt"
- "io"
- "io/fs"
- "io/ioutil"
- "log"
- "os"
- "path/filepath"
- "regexp"
- "strings"
- )
- // Copy 复制目录下的所有文件
- func Copy(from, to string) error {
- var err error
- f, err := os.Stat(from)
- if err != nil {
- return err
- }
- fn := func(fromFile string) error {
- //复制文件的路径
- rel, err := filepath.Rel(from, fromFile)
- if err != nil {
- return err
- }
- toFile := filepath.Join(to, rel)
- //创建复制文件目录
- if err = os.MkdirAll(filepath.Dir(toFile), 0777); err != nil {
- return err
- }
- //读取源文件
- file, err := os.Open(fromFile)
- if err != nil {
- return err
- }
- defer file.Close()
- bufReader := bufio.NewReader(file)
- // 创建复制文件用于保存
- out, err := os.Create(toFile)
- if err != nil {
- return err
- }
- defer out.Close()
- // 然后将文件流和文件流对接起来
- _, err = io.Copy(out, bufReader)
- return err
- }
- //转绝对路径
- pwd, _ := os.Getwd()
- if !filepath.IsAbs(from) {
- from = filepath.Join(pwd, from)
- }
- if !filepath.IsAbs(to) {
- to = filepath.Join(pwd, to)
- }
- //复制
- if f.IsDir() {
- return filepath.WalkDir(from, func(path string, d fs.DirEntry, err error) error {
- if !d.IsDir() {
- return fn(path)
- } else {
- if err = os.MkdirAll(path, 0777); err != nil {
- return err
- }
- }
- return err
- })
- } else {
- return fn(from)
- }
- }
- func SearchAndWriteInfConst(fileName, title, content, infoName string) error {
- lineBytes, err := ioutil.ReadFile(fileName)
- var lines []string
- if err != nil {
- fmt.Println(err)
- } else {
- contents := string(lineBytes)
- lines = strings.Split(contents, "\n")
- }
- isHave := false
- for _, line := range lines {
- isHave = strings.Contains(line, content)
- if isHave {
- break
- }
- /* if err != nil {
- log.Printf("匹配常量类里的interface报错 :%v", err)
- continue
- }
- if isIn {
- isHave = true
- }*/
- }
- var newLines []string
- for _, line := range lines {
- isIn, err := regexp.MatchString(infoName, line)
- if err != nil {
- log.Printf("匹配常量类里的interface报错 :%v", err)
- continue
- }
- if isIn && !isHave {
- newLines = append(newLines, "\t"+title)
- newLines = append(newLines, "\t"+content)
- }
- newLines = append(newLines, line)
- }
- file, err := os.OpenFile(fileName, os.O_WRONLY, 0666)
- defer file.Close()
- _, err = file.WriteString(strings.Join(newLines, "\n"))
- if err != nil {
- return err
- }
- return nil
- }
|