Skip to content

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 常量
overwritingfalse 时,如果本地目标文件已存在,返回 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)
说明
作用按文件名模式搜索控制器常用文件区
patternglob 风格匹配,例如 *.csvdemo*
返回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);  // 删除会移除控制器侧文件,确认后再执行

示例代码

cpp17/file_manager_basic/src/main.cpp
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();
}