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" // 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); // 삭제는 컨트롤러 측 파일을 제거합니다. 확인한 뒤 실행하십시오.예제 코드
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();
}