-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate.go
64 lines (55 loc) · 1.26 KB
/
generate.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
/*
* @Author: nijineko
* @Date: 2024-04-12 17:53:08
* @LastEditTime: 2024-04-12 20:15:01
* @LastEditors: nijineko
* @Description: 创建文件块
* @FilePath: \Miyako\pkg\block\generate.go
*/
package block
import (
"os"
"path/filepath"
"github.com/nijinekoyo/miyako/pkg/catalog"
)
/**
* @description: 创建一个文件块
* @param {string} FolderPath 文件夹路径
* @return {*Catalog} catalog
* @return {error} 错误
*/
func Generate(FolderPath string) (*catalog.Catalog, error) {
// 为文件夹创建catalog
CatalogData, err := catalog.Generate(FolderPath)
if err != nil {
return nil, err
}
// 生成文件块
BlockFile, err := os.OpenFile(filepath.Join(FolderPath, CatalogData.BlockFile), os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return nil, err
}
// 写入文件块
for _, File := range CatalogData.Files {
// 读取文件
FileData, err := os.ReadFile(filepath.Join(FolderPath, File.Path))
if err != nil {
return nil, err
}
// 写入文件块
Size, err := BlockFile.Write(FileData)
if err != nil {
return nil, err
}
// 核对文件大小
if int64(Size) != File.Size {
return nil, os.ErrInvalid
}
}
// 关闭文件块
err = BlockFile.Close()
if err != nil {
return nil, err
}
return CatalogData, nil
}