2009-01-15 53 views
1

我想以編程方式更改與HDF5文件中的數據集關聯的數據。我似乎無法找到通過名稱刪除數據集的方法(允許我使用修改後的數據再次添加它)或按名稱更新數據集。我爲HDF5 1.6.x使用C API,但是指向任何HDF5 API的指針都會很有用。刪除或更新HDF5中的數據集?

回答

5

According to the user guide

HDF5不此時提供了一種簡單的機制來從文件中刪除數據集或回收由已刪除的對象所佔據的存儲空間。

如此簡單的刪除似乎是不可能的。但部分繼續:

刪除數據集,並回收其使用可以與H5Ldelete函數來完成的空間和h5repack應用程序。使用H5Ldelete函數,可以從文件結構中刪除指向數據集的鏈接。在所有鏈接被刪除後,數據集變得對任何應用程序都不可訪問,並且從文件中被有效地刪除。恢復未鏈接數據集佔用空間的方法是將文件的所有對象寫入新文件。任何未鏈接的對象對應用程序不可訪問,並且不會包含在新文件中。將對象寫入新文件可以使用自定義程序或實用程序完成。

+0

謝謝。任何想法PyTables(一個建立在HDF5之上的python引擎)如何處理? – 2009-01-16 22:01:37

1

如果你想++,你需要下面的命令來刪除在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