我想以编程方式更改与 HDF5 文件中的数据集关联的数据。我似乎找不到一种方法来按名称删除数据集(允许我使用修改后的数据再次添加它)或按名称更新数据集。我正在使用 HDF5 1.6.x 的 C API,但指向任何 HDF5 API 的指针都会很有用。

有帮助吗?

解决方案

根据用户指南:

HDF5 目前不提供一种简单的机制来从文件中删除数据集或回收已删除对象占用的存储空间。

如此简单的删除似乎是不可能的。但本节继续:

删除数据集并回收其使用的空间可以使用 H5Ldelete 函数和 h5repack 实用程序。随着 H5Ldelete 函数,可以从文件结构中删除数据集的链接。删除所有链接后,任何应用程序都无法访问该数据集,并且会从文件中有效删除。恢复未链接数据集占用的空间的方法是将文件的所有对象写入新文件。应用程序无法访问任何未链接的对象,并且不会将其包含在新文件中。将对象写入新文件可以使用自定义程序或使用 h5repack 实用程序。

其他提示

如果你想++需要进行如下的命令来删除在C数据集:

H5File m_h5File (pathAndNameToHDF5File, H5F_ACC_RDWR); //The hdf5 c++ object.
std::string channelName = "/myGroup/myDataset";
int result = H5Ldelete(m_h5File.getId(), channelName.data(), H5P_DEFAULT);

结果将是,如果成功的非负值;否则返回一个负值。 https://support.hdfgroup.org/HDF5/doc/ RM / RM_H5L.html#链路删除

正如@MaxLybbert所说,硬盘空间它不recoverd。您必须使用重新包装工具。 然而,随着HDF5 v.1.10的空间可以回收。但是,用户指南还没有准备好: https://support.hdfgroup.org/HDF5 /docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top