Pregunta

Me gustaría cambiar programáticamente los datos asociados con un conjunto de datos en un archivo HDF5. Parece que no puedo encontrar una manera de eliminar un conjunto de datos por nombre (lo que me permite agregarlo nuevamente con los datos modificados) o actualizar un conjunto de datos por nombre. Estoy usando la API de C para HDF5 1.6.x, pero sería útil utilizar punteros hacia cualquier API de HDF5.

¿Fue útil?

Solución

Según la guía del usuario :

  

HDF5 en este momento no proporciona un mecanismo fácil para eliminar un conjunto de datos de un archivo o para reclamar el espacio de almacenamiento ocupado por un objeto eliminado.

Entonces, la eliminación simple parece estar fuera de discusión. Pero la sección continúa:

  

La eliminación de un conjunto de datos y la recuperación del espacio utilizado se puede hacer con la función H5Ldelete y la h5repack programa de utilidad. Con la función H5Ldelete , los enlaces a un conjunto de datos se pueden eliminar de la estructura del archivo. Una vez que se han eliminado todos los enlaces, el conjunto de datos se vuelve inaccesible para cualquier aplicación y se elimina efectivamente del archivo. La forma de recuperar el espacio ocupado por un conjunto de datos no vinculado es escribir todos los objetos del archivo en un nuevo archivo. Cualquier objeto no vinculado es inaccesible para la aplicación y no se incluirá en el nuevo archivo. La escritura de objetos en un nuevo archivo se puede hacer con un programa personalizado o con el programa de utilidad h5repack .

Otros consejos

Si desea eliminar un conjunto de datos en c ++, necesita los siguientes comandos:

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);
El resultado

será un valor no negativo si tiene éxito; de lo contrario devuelve un valor negativo. https://support.hdfgroup.org/HDF5/doc/ RM / RM_H5L.html # Eliminar enlace

Como dijo @MaxLybbert, el espacio del disco duro no se recupera. Debe usar la herramienta de reempaque. Sin embargo, con HDF5 v.1.10 se puede recuperar el espacio. Pero la guía del usuario aún no está lista: https://support.hdfgroup.org/HDF5 /docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top