HDF5에서 데이터 세트를 삭제하거나 업데이트 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/447854

  •  22-07-2019
  •  | 
  •  

문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top