Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ hdf5/c+中存在测试组+;_C++_Hdf5 - Fatal编程技术网

C++ hdf5/c+中存在测试组+;

C++ hdf5/c+中存在测试组+;,c++,hdf5,C++,Hdf5,我正在打开一个现有的HDF5文件以附加数据;我想确保名为/A的组存在,以便后续访问。我正在寻找一种简单的方法,可以有条件地创建/A(如果不存在,则创建并返回新组,或者返回现有组)。一种方法是测试/A是否存在。我怎样才能有效地做到这一点 根据API文档,我可以这样做: H5::H5File h5file(filename,H5F_ACC_RDWR); H5::H5Group grp; try{ grp=h5file.openGroup("A"); } catch(H5::Exception&

我正在打开一个现有的HDF5文件以附加数据;我想确保名为
/A
的组存在,以便后续访问。我正在寻找一种简单的方法,可以有条件地创建
/A
(如果不存在,则创建并返回新组,或者返回现有组)。一种方法是测试
/A
是否存在。我怎样才能有效地做到这一点

根据API文档,我可以这样做:

H5::H5File h5file(filename,H5F_ACC_RDWR);
H5::H5Group grp;
try{
   grp=h5file.openGroup("A");
} catch(H5::Exception& e){
   /* group does not exists, create it */
   grp=h5file.createGroup("A");
}
但显而易见的丑陋来自于这样一个事实:例外被用来传达一点也不例外的信息

有,它似乎以这样的方式包装:C例程的false(不存在)返回值抛出异常;同样的问题


在这种情况下,是否可以使用C API来清理?或者在C++中,直接设计了一些函数来测试我忽略的吗?

< P>我用一个组来检验:
bool H5Location::attrExists(const char* name) const;
这样,您就可以在指定的位置测试group/dataset/…是否存在

// Test if empty (= new) H5 file
auto isNewFile = this->attrExists(VariablesH5GroupName);

正如Yossarian在他的评论中所建议的,您可以使用HDF51.8.0+C-API

bool pathExists(hid_t id, const std::string& path)
{
  return H5Lexists( id, path.c_str(), H5P_DEFAULT ) > 0;
}

H5::H5File h5file(filename,H5F_ACC_RDWR);
H5::H5Group grp;
if (pathExists(h5file.getId(), "A")) 
   grp=h5file.openGroup("A");
else
   grp=h5file.createGroup("A");

看起来C++的等价物根本就不存在。
试试看。。。catch…<代码>看起来比我的C++要多得多,但是我认为使用C API是你的两个选项。不是我需要的100%个(我仍然必须检查它是一个组,而不是其他属性),但是它看起来很好。谢谢实际上,只有当组具有命名属性时,这才有效,但情况并非总是如此……因此这不是正确答案,抱歉:/刚刚尝试过;对于普通数据集,即使数据集存在,它也将返回false。也许在答案中更明显地指出它不是一个正确的答案。