-
Notifications
You must be signed in to change notification settings - Fork 185
/
Copy pathmakedir.go
149 lines (134 loc) · 4.13 KB
/
makedir.go
1
2
3
4
5
6
7
8
9
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
43
44
45
46
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package leetcode
import (
"fmt"
"io"
"log"
"os"
)
const (
SOLUTIONS_PATH = "leetcode/"
SOURCE_SOLUTION_FILE_PATH = "cmd/template/solution/Solution.go"
SOURCE_SOLUTION_TEST_FILE_PATH = "cmd/template/solution/Solution_test.go"
SOURCE_SOLUTION_README_FILE_PATH = "cmd/template/solution/README.md"
)
func MakeDirFromTo(problems []Problem, from, to int) {
if from%100 != 1 || to-from+1 != 100 {
return
}
baseDir := fmt.Sprintf("%d-%d/", from, to)
for i := 0; i < len(problems); i++ {
if problems[i].Stat.FrontendQuestionID >= from && problems[i].Stat.FrontendQuestionID <= to {
log.Printf("~~ 开始生成第 %d 题的文件夹 ~~", problems[i].Stat.FrontendQuestionID)
if problems[i].PaidOnly {
log.Printf("%d 号题需要付费。如果已经订阅,请注释掉本代码。", problems[i].Stat.FrontendQuestionID)
continue
}
_path := SOLUTIONS_PATH + baseDir + problems[i].PathName
if is_DirExists, _ := PathExists(_path); is_DirExists {
log.Println("目录已经存在:", _path)
} else {
err := os.MkdirAll(_path, os.ModePerm)
if err != nil {
log.Printf("目录创建失败:%s", err.Error())
} else {
// 复制文件
log.Println("开始复制文件:")
copy(SOURCE_SOLUTION_FILE_PATH, _path+"/Solution.go")
copy(SOURCE_SOLUTION_TEST_FILE_PATH, _path+"/Solution_test.go")
GenerateReadme(problems[i], _path)
}
}
}
}
}
// 生成木目录Dir
func MakeDir(problems []Problem) {
for i := 0; i < len(problems); i++ {
// fmt.Println(problems[i].PathName)
log.Printf("~~ 开始生成第 %d 题的文件夹 ~~", problems[i].Stat.FrontendQuestionID)
// 检查数据
if problems[i].Stat.QuestionID == 0 {
log.Printf("%d 号题不存,请核查题号。", problems[i].Stat.FrontendQuestionID)
}
if problems[i].PaidOnly {
log.Printf("%d 号题需要付费。如果已经订阅,请注释掉本代码。", problems[i].Stat.FrontendQuestionID)
continue
}
if is_DirExists, _ := PathExists(SOLUTIONS_PATH + problems[i].PathName); is_DirExists {
log.Println("目录已经存在:", SOLUTIONS_PATH+problems[i].PathName)
} else {
err := os.Mkdir(SOLUTIONS_PATH+problems[i].PathName, os.ModePerm)
if err != nil {
log.Printf("目录创建失败:%s", err.Error())
} else {
// 复制文件
log.Println("开始复制文件:")
copy(SOURCE_SOLUTION_FILE_PATH, SOLUTIONS_PATH+problems[i].PathName+"/Solution.go")
copy(SOURCE_SOLUTION_TEST_FILE_PATH, SOLUTIONS_PATH+problems[i].PathName+"/Solution_test.go")
GenerateReadme(problems[i])
}
}
}
}
// 拷贝文件 要拷贝的文件路径 拷贝到哪里
func copyFile(source, dest string) bool {
if source == "" || dest == "" {
log.Println("source or dest is null")
return false
}
// 打开文件资源
source_open, err := os.Open(source)
// 养成好习惯。操作文件时候记得添加 defer 关闭文件资源代码
if err != nil {
log.Println(err.Error())
return false
}
defer source_open.Close()
// 只写模式打开文件 如果文件不存在进行创建 并赋予 644的权限。详情查看linux 权限解释
dest_open, err := os.OpenFile(dest, os.O_CREATE|os.O_WRONLY, 644)
if err != nil {
log.Println(err.Error())
return false
}
// 养成好习惯。操作文件时候记得添加 defer 关闭文件资源代码
defer dest_open.Close()
// 进行数据拷贝
_, copy_err := io.Copy(dest_open, source_open)
if copy_err != nil {
log.Println(copy_err.Error())
return false
} else {
return true
}
}
func copy(src, dst string) (int64, error) {
sourceFileStat, err := os.Stat(src)
if err != nil {
return 0, err
}
if !sourceFileStat.Mode().IsRegular() {
return 0, fmt.Errorf("%s is not a regular file", src)
}
source, err := os.Open(src)
if err != nil {
return 0, err
}
defer source.Close()
destination, err := os.Create(dst)
if err != nil {
return 0, err
}
defer destination.Close()
nBytes, err := io.Copy(destination, source)
return nBytes, err
}
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}