首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试HDF5/c++中是否存在数据集并处理错误

测试HDF5/c++中是否存在数据集并处理错误
EN

Stack Overflow用户
提问于 2021-06-28 19:47:33
回答 1查看 93关注 0票数 0

我正在用HDF5库在C++中读取*.hdf5系列文件。这些文件具有相同的数据集(相同的keys,但不同的信息),但有时一个文件中可能缺少单个数据集(例如,在100个文件中我有数据集apple,在3个文件中我没有任何apple数据集),在这些情况下有以下例外:

代码语言:javascript
运行
复制
HDF5-DIAG: Error detected in HDF5 (1.10.7) thread 0:
 #000: H5D.c line 298 in H5Dopen2(): unable to open dataset
   major: Dataset
   minor: Can't open object
 [...]
 #005: H5Gloc.c line 376 in H5G__loc_find_cb(): object 'apple' doesn't exist
   major: Symbol table
   minor: Object not found
terminate called after throwing an instance of 'H5::GroupIException'

当这个错误发生时,我想要处理这个异常,例如为该文件创建一个空的apple数据集。

在这里,我发布了读取文件->组->数据集的代码块。为了处理错误,我想创建一个空的GoldenApples向量,即使dataset apple不存在。

代码语言:javascript
运行
复制
 std::string FileName = "fruit." + std::to_string(cutID) + ".hdf5";

 fruitFile = H5::H5File(FileName, H5F_ACC_RDONLY );

 H5::Group group = fruitFile.openGroup("fruit");
 H5::DataSet dataset = group.openDataSet("apple");
 H5::DataSpace dataspace = dataset.getSpace();
 hsize_t naxes[2];
 dataspace.getSimpleExtentDims(naxes, NULL);

 AppleType = Eigen::MatrixXd::Zero(naxes[1], naxes[0]);

 dataset.read(AppleType.data(), H5::PredType::NATIVE_DOUBLE);

 GoldenApples = std::vector<int>(naxes[0], 0.);
 

 //need golden apples, which are in pos (4,i) in matrix AppleType
 for (int i = 0; i < naxes[0]; i++){
   GoldenApples[i] = AppleType(4,i);
   
 }

 fruitFile.close();
EN

回答 1

Stack Overflow用户

发布于 2021-06-28 21:44:18

如果您没有绑定到特定的库,那么可以查看一下HDFql,因为使用它可以很容易地检查HDF5数据集的存在。在C++中使用HDFql,您的用例可以按如下方式解决:

代码语言:javascript
运行
复制
// check if dataset 'apple' exists in HDF5 file 'fruit.h5'
if (HDFql::execute("SHOW DATASET fruit.h5 apple") == HDFql::Success)
{
    std::cout << "Dataset apple exists!" << std::endl;
}
else
{
    std::cout << "Dataset apple does not exist!" << std::endl;
}

有关HDFql的更多信息,请查看其reference manual以及一些examples

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68162828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档