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 스타일 매칭. 예: *.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"  // SDK 호출 결과 확인용 STATUS_CODE를 포함합니다.
int main()  // 예제 프로그램 진입점입니다.
{  // 예제 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;  // 예제를 정상 종료합니다.
}  // 예제 main 함수를 종료합니다.

시나리오 예제

아래 조각들은 "검색, 존재 여부 판단, 업로드/다운로드, 삭제" 흐름으로 이 페이지의 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();
}