HDF5에서 데이터 세트를 삭제하거나 업데이트 하시겠습니까?
문제
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#link-delete
@maxlybbert가 말했듯이, 하드 디스크 공간은 복구되지 않습니다. 재 포장 도구를 사용해야합니다. 그러나 HDF5 v.1.10을 사용하면 공간을 복구 할 수 있습니다. 그러나 사용자 가이드는 아직 준비되지 않았습니다. https://support.hdfgroup.org/hdf5/docnewfeatures/newfeaturesfilespacemgmtdocs.html