3.10 ControllerFileManager 文件管理类
概述
ControllerFileManager 负责控制器文件上传、下载、删除、搜索和存在性判断。
3.10.1 上传文件
cpp
Upload(const std::string& filePath, const std::string& fileType, bool overwriting = false)| 项 | 说明 |
|---|---|
| 作用 | 上传本地文件到控制器对应文件区 |
filePath | 本地文件路径;用户程序、积木程序等会按基础文件名查找同名配套文件 |
fileType | 文件类型,建议使用 FileType 常量 |
overwriting | 是否允许覆盖控制器侧同名文件 |
| 返回 | STATUS_CODE |
文件类型影响上传行为:
| 文件类型 | 上传口径 |
|---|---|
FileType::TRAJECTORY | 按基础名上传 .trajectory |
FileType::USER_PROGRAM | 按基础名上传 .json 与 .xml |
FileType::BLOCK_PROGRAM | 按基础名上传 .block 、 .json 、 .xml |
FileType::ROBOT_TMP / FileType::TRAJECTORY_CSV | 按传入文件名上传单个文件 |
3.10.2 下载文件
cpp
Download(const std::string& fileName, const std::string& localPath, const std::string& fileType, bool overwriting = false)| 项 | 说明 |
|---|---|
| 作用 | 下载控制器文件到本地目录或目标文件 |
fileName | 控制器侧文件名或基础名;用户程序、积木程序不用带扩展名 |
localPath | 本地保存目录; FileType::FLY_SHOT 场景下按目标文件路径处理 |
fileType | 文件类型,建议使用 FileType 常量 |
overwriting | 为 false 时,如果本地目标文件已存在,返回 FAILED_TO_DOWNLOAD_SAME_NAME_FILE |
| 返回 | STATUS_CODE |
补充规则:
- 下载用户程序或积木程序时,SDK 会下载配套文件并在本地生成同名
.zip。 - 下载前会先检查控制器侧目标文件是否存在,不存在时返回
FILE_NOTEXIST。
3.10.3 删除文件
cpp
Delete(const std::string& fileName, const std::string& fileType)| 项 | 说明 |
|---|---|
| 作用 | 删除控制器侧文件或文件组 |
fileName | 控制器侧文件名或基础名 |
fileType | 文件类型,决定删除的是单文件还是同名文件组 |
| 返回 | STATUS_CODE |
删除前会先检查目标是否存在;不存在时返回 FILE_NOTEXIST 。
3.10.4 搜索文件
cpp
Search(const std::string& pattern)| 项 | 说明 |
|---|---|
| 作用 | 按文件名模式搜索控制器常用文件区 |
pattern | glob 风格匹配,例如 *.csv 、 demo* |
| 返回 | std::pair<std::vector<FileInfo>, STATUS_CODE> |
返回的 FileInfo 包含文件名和文件所在路径。调用是否成功以状态码为准,搜索结果可为空。
3.10.5 判断文件是否存在
cpp
IsExist(const std::string& fileName)| 项 | 说明 |
|---|---|
| 作用 | 判断控制器上的绝对路径是否存在 |
fileName | 控制器绝对路径,例如 /root/robot_data/progs/robot_tmp/demo.csv |
| 返回 | std::pair<bool, STATUS_CODE> |
STATUS_CODE::OK 表示判断动作成功, bool 才表示文件是否存在。
最小调用示例
cpp
#include <iostream> // 引入标准输出流,用于打印文件查询结果
#include "arm_api.h" // 引入 Arm 主入口,连接后通过 arm.controllerFileManager 访问文件接口
#include "status_code.h" // 引入 STATUS_CODE,用于检查 SDK 调用结果
int main() // 示例程序入口
{ // 进入示例主函数
Arm arm; // 创建机器人会话对象
STATUS_CODE connectRet = arm.Connect("192.168.110.2", ""); // 连接控制器,示教器地址留空表示使用默认规则
if (connectRet != STATUS_CODE::OK) { // 判断连接是否失败
return 1; // 连接失败时直接退出
} // 结束连接结果判断
auto [items, searchRet] = arm.controllerFileManager.Search("*.csv"); // 搜索控制器常用文件区内的 CSV 文件
auto [exists, existRet] = arm.controllerFileManager.IsExist( // 判断指定控制器绝对路径是否存在
"/root/robot_data/progs/robot_tmp/demo.csv" // 传入控制器侧文件绝对路径
); // 结束文件存在性查询调用
if (searchRet != STATUS_CODE::OK || existRet != STATUS_CODE::OK) { // 判断搜索或存在性查询是否失败
return 1; // 任一查询失败时返回错误码
} // 结束文件查询结果判断
std::cout << "search_count=" << items.size() << "\n"; // 打印搜索结果数量
std::cout << "demo_exists=" << exists << "\n"; // 打印目标文件是否存在
// arm.controllerFileManager.Download( // 下载会写本地文件,确认目标路径后再取消注释
// "demo.csv", // 指定控制器侧文件名
// "D:/sdk-demo", // 指定本地保存目录
// FileType::TRAJECTORY_CSV, // 指定文件类型为轨迹 CSV
// true // 允许覆盖本地同名文件
// ); // 结束下载示例调用
return 0; // 示例正常结束
} // 结束示例主函数场景化示例
下面几组片段按 “搜索、存在性判断、上传下载、删除” 交叉覆盖本页 API。片段默认承接最小调用示例里已经连接成功的 arm 对象;文件写入和删除类调用保持注释,确认路径后再执行。
搜索和判断文件是否存在
cpp
auto [items, searchRet] = arm.controllerFileManager.Search("*.csv"); // 按模式搜索控制器文件
auto [exists, existRet] = arm.controllerFileManager.IsExist("/root/robot_data/progs/robot_tmp/demo.csv"); // 判断控制器绝对路径是否存在
if (searchRet == STATUS_CODE::OK && existRet == STATUS_CODE::OK) { // 判断查询类接口是否成功
std::cout << "search_count=" << items.size() << " exists=" << exists << "\n"; // 打印搜索数量和存在性结果
} // 结束查询结果判断上传和下载文件
cpp
// STATUS_CODE uploadRet = arm.controllerFileManager.Upload("D:/sdk-demo/demo.csv", FileType::TRAJECTORY_CSV, true); // 上传会读取本地文件并写入控制器文件区,确认后再执行
// STATUS_CODE downloadRet = arm.controllerFileManager.Download("demo.csv", "D:/sdk-demo", FileType::TRAJECTORY_CSV, true); // 下载会写本地文件,确认保存路径后再执行删除控制器侧文件
cpp
// STATUS_CODE deleteRet = arm.controllerFileManager.Delete("demo.csv", FileType::TRAJECTORY_CSV); // 删除会移除控制器侧文件,确认后再执行示例代码
cpp
#include "query_files/run.h"
#include "write_files/run.h"
int main(void)
{
// [ZH] 默认只调用一个门面方法;如需体验其他接口,请把下一行替换成下面任意一行。
// [EN] The main function calls only one facade by default. Replace the next line with any line below to try other APIs.
return RunFileManagerBasicQueryFiles();
// return RunFileManagerBasicWriteFiles();
}