我想以编程方式更改与 HDF5 文件中的数据集关联的数据。我似乎找不到按名称删除数据集(允许我使用修改后的数据再次添加它)或按名称更新数据集的方法。我正在使用 HDF5 1.6.x 的 C API,但指向任何 HDF5 API 的指针都会很有用。
Barry Wark
问问题
8539 次
2 回答
8
HDF5 目前不提供从文件中删除数据集或回收已删除对象占用的存储空间的简单机制。
如此简单的删除似乎是不可能的。但该部分继续:
可以使用
H5Ldelete
函数和h5repack
实用程序来删除数据集并回收它使用的空间。使用该H5Ldelete
功能,可以从文件结构中删除指向数据集的链接。删除所有链接后,任何应用程序都无法访问该数据集,并有效地从文件中删除。恢复未链接数据集占用空间的方法是将文件的所有对象写入新文件。应用程序无法访问任何未链接的对象,并且不会包含在新文件中。h5repack
可以使用自定义程序或实用程序将对象写入新文件。
于 2009-01-15T19:12:36.123 回答
2
如果要在 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#Link-Delete
正如@MaxLybbert 所说,它没有恢复的硬盘空间。您必须使用重新打包工具。但是,使用 HDF5 v.1.10 可以恢复空间。但是用户指南还没有准备好: https: //support.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html
于 2016-11-10T15:17:57.187 回答