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 }