工程的使用#
对工程的操作可以通过调用 visionflow::Project
类的静态函数完成。
调用这些函数时通常需要一个 visionflow::ProjectDescriptor
类型的参数,
并且设置其中的 workspace_token
和 project_name
字段,用于指定 Workspace 路径和工程名称。
Note
workspace_token
和 project_name
必须符合以下要求,
否则会抛出 visionflow::excepts::InvalidArgument
类型的异常。
workspace_token
和 project_name
均须满足:
不为空字符串;
不以空白字符(空格、制表符等)开头或结尾;
不包含
* < > ? " |
中的任何一个字符。
在以上要求之外, project_name
还须满足:
不超过200个字符;
不包含
\ / : * ? " < > |
中的任何一个字符。
查看工程基本信息#
工程的基本信息可以使用 visionflow::Project::ReadProjectDescriptorFromProject()
函数获取。
该函数接收一个 visionflow::ProjectDescriptor
类型的引用作为参数。
传入参数时须设置 workspace_token
project_name
两个字段以指定工程。
如果工程不存在,函数返回 false
;
如果工程存在,函数返回 true
,并且修改传入的 ProjectDescriptor
,写入以下字段:
created_time
工程创建的时间last_modified_time
工程最后一次被修改的时间remark
备注sdk_version
创建工程时使用的VisionFlow SDK版本brief_images
工程预览图,通常是数据集的前4张
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name};
bool proj_exists = visionflow::Project::ReadProjectDescriptorFromProject(project_descriptor);
if (proj_exists) {
// project_descriptor 的各个字段填充为工程的信息
std::cout << project_descriptor.remark << std::endl;
}
创建、打开、删除工程#
创建工程#
工程可以使用 visionflow::Project::Create()
函数创建;该函数接收一个
visionflow::ProjectDescriptor
类型的参数。
按上节所述的要求设置好参数的 workspace_token
和 project_name
字段。
remark
字段可选,用于设定工程的备注。其他字段被忽略。
创建工程时,会创建工程目录,并且创建名为 default_main
的默认数据集。
函数的返回值是一个新的 visionflow::ProjectDescriptor
对象,其中的
created_time
last_modified_time
sdk_version
和 brief_images
字段会被正确填充。
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
std::string remark = "This is a remark";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name, remark};
auto created = visionflow::Project::Create(project_descriptor);
Note
尝试创建已经存在的工程,将会抛出 visionflow::excepts::ProjectAlreadyExists
类型的异常。
Note
判断工程是否存在,可以使用 visionflow::Project::Exists()
函数。
打开工程#
工程可以使用 visionflow::Project::Open()
函数打开。
该函数有2个参数,第1个为上述 visionflow::ProjectDescriptor
对象,
第2个参数(可选)为 visionflow::ProjectOpenMode
类型的值,用于指定打开模式。
kNormally
是默认的打开模式,打开的工程可读可写。kReadOnly
以只读模式打开工程。kForceWrite
和kNormally
完全等价,仅为了兼容性而提供。
返回值为 std::unique_ptr<Project>
类型的智能指针,指向打开的工程。
当该 unique_ptr
析构时,工程会自动关闭。也可以通过手动调用 reset()
来关闭工程。
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name};
std::unique_ptr<visionflow::Project> project = visionflow::Project::Open(project_descriptor);
// 工程会在该指针释放时自动关闭
// 也可以通过以下方式手动关闭
project.reset();
// 通过以下方式打开为只读模式
project = visionflow::Project::Open(project_descriptor, visionflow::kReadOnly);
Note
已经打开的工程不能重复打开,否则将抛出 visionflow::excepts::ProjectLockExist
类型的异常。
Note
判断工程是否处于关闭状态,可以使用 visionflow::Project::Closed()
函数。
另一种方法#
提供了一个重载的 visionflow::Project::Open()
函数,接收一个指向 .vflow
目录的路径字符串和一个可选的 visionflow::ProjectOpenMode
值。
std::string path = "D:/path/to/MyProject.vflow";
auto project = visionflow::Project::Open(path);
删除工程#
工程可以使用 visionflow::Project::RemoveProject()
函数删除。
在删除工程时,工程目录下所有由VisionFlow创建的文件或目录均被删除。如果工程目录下没有其他文件, 工程目录也会被删除。
Warning
放置在工程目录下的用户文件不会被删除,但由VisionFlow创建的二级目录下的文件均会随目录一起删除。
在删除工程前务必做好检查和备份。
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name};
visionflow::Project::RemoveProject(project_descriptor);
Note
在尝试删除时工程必须处于关闭状态,否则将抛出 visionflow::excepts::ProjectLockExist
类型的异常。