Excluir ou atualizar um conjunto de dados em HDF5?
Pergunta
Eu gostaria de mudar programaticamente os dados associados a um conjunto de dados em um arquivo HDF5. Eu não consigo encontrar uma maneira de excluir um conjunto de dados por nome (que me permite adicioná-lo novamente com os dados modificados) ou atualizar um conjunto de dados pelo nome. Eu estou usando a API C para HDF5 1.6.x, mas ponteiros em relação a qualquer API HDF5 seria útil.
Solução
de acordo com o guia do usuário :
HDF5 não neste momento fornecer um mecanismo fácil para remover um conjunto de dados de um arquivo ou para recuperar o espaço de armazenamento ocupado por um objeto excluído.
Tão simples eliminação parece estar fora de questão. Mas a secção continua:
A remoção de um conjunto de dados e recuperar o espaço que costumava pode ser feito com a função
H5Ldelete
eh5repack
programa utilitário . Com a funçãoH5Ldelete
, links para um conjunto de dados pode ser removido da estrutura de arquivos. Depois de todos os links foram removidos, o conjunto de dados torna-se inacessível a qualquer aplicação e é efetivamente removido do arquivo. A maneira de recuperar o espaço ocupado por um conjunto de dados desvinculados é escrever todos os objetos do arquivo em um novo arquivo. Qualquer objeto desvinculado é inacessível para a aplicação e não serão incluídos no novo arquivo. Escrevendo objetos para um novo arquivo pode ser feito com um programa personalizado ou com oh5repack
programa utilitário.
Outras dicas
Se você quiser excluir um conjunto de dados em C ++ são necessários os seguintes 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);
resultado será um valor não negativo se for bem sucedida; caso contrário devolve um valor negativo. https://support.hdfgroup.org/HDF5/doc/ RM / RM_H5L.html # link-Excluir
Como @MaxLybbert disse, o espaço no disco rígido é não recoverd. Você deve usar a ferramenta repack. No entanto, com HDF5 V.1.10 o espaço pode ser recuperado. Mas o guia do usuário ainda não está pronto: https://support.hdfgroup.org/HDF5 /docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html