diff --git a/scagent/core/JsonRpc.go b/scagent/core/JsonRpc.go index 8e8ffb2..c054575 100644 --- a/scagent/core/JsonRpc.go +++ b/scagent/core/JsonRpc.go @@ -1,8 +1,16 @@ package core +import ( + "os" + "path/filepath" + "scagnet/util" + + "go.uber.org/zap" +) + // 传入的参数 type Args struct { - FilePath string `json:"file_path"` + FilePath string } // 返回的参数 @@ -10,10 +18,58 @@ type Reply struct { FilePath string `json:"file_path"` } -// +// 返回的json数据 type FileRpc string +// 返回的文件json结构体 +type FloopJson struct { + Path string `json:"path"` + Size int64 `json:"size"` + Hash string `json:"hash"` +} + +// 文件列表 +type FlpList struct { + Flist []FloopJson `json:"list"` +} + // 获取文件路径 func (f *FileRpc) GetFilePath(args *Args, replay *Reply) error { + rootDir := args.FilePath + logger := util.NewProductionLogger() + defer logger.Sync() + // 遍历目录下的文件 + var allFiles []string // 存储所有文件路径 + var flplist FlpList // 文件列表 + + // 递归遍历目录及其子目录 + err := filepath.WalkDir(rootDir, func(path string, d os.DirEntry, err error) error { + // 处理遍历过程中的错误(如权限不足) + if err != nil { + logger.Error("访问路径出错", zap.Error(err)) + return filepath.SkipDir // 跳过当前目录,继续遍历其他目录 + } + + // 只收集文件(排除目录) + if !d.IsDir() { + allFiles = append(allFiles, path) + } + return nil + }) + + if err != nil { + logger.Error("遍历目录出错", zap.Error(err)) + return err + } + // 打印所有文件路径 + for i, file := range allFiles { + // 打印所有文件路径 + // fmt.Printf("%d. %s\n", i+1, file) + d, _ := os.Stat(file) + // 加入到列表 + hash := util.CalacHash(file) + flplist.Flist = append(flplist.Flist, FloopJson{Path: file, Size: d.Size(), Hash: hash}) + } + return nil }