Question

Je souhaite modifier par programme les données associées à un jeu de données dans un fichier HDF5. Je n'arrive pas à trouver un moyen de supprimer un jeu de données par son nom (me permettant de l'ajouter à nouveau avec les données modifiées) ou de mettre à jour un jeu de données par son nom. J'utilise l'API C pour HDF5 1.6.x, mais des pointeurs sur toutes les API HDF5 seraient utiles.

Était-ce utile?

La solution

Selon le guide de l'utilisateur :

  

HDF5 ne fournit pas pour le moment un mécanisme simple pour supprimer un ensemble de données d'un fichier ou pour récupérer l'espace de stockage occupé par un objet supprimé.

Donc, la suppression simple semble être hors de question. Mais la section continue:

  

La suppression d'un jeu de données et la récupération de l'espace utilisé peuvent être effectuées à l'aide de la fonction H5Ldelete et de la h5repack programme utilitaire. Avec la fonction H5Ldelete , les liens vers un ensemble de données peuvent être supprimés de la structure de fichier. Une fois tous les liens supprimés, le jeu de données devient inaccessible à toute application et est effectivement supprimé du fichier. Pour récupérer l'espace occupé par un ensemble de données non lié, vous devez écrire tous les objets du fichier dans un nouveau fichier. Tout objet non lié est inaccessible à l'application et ne sera pas inclus dans le nouveau fichier. L'écriture d'objets dans un nouveau fichier peut être réalisée à l'aide d'un programme personnalisé ou du programme utilitaire h5repack .

Autres conseils

Si vous souhaitez supprimer un jeu de données en c ++, vous avez besoin des commandes suivantes:

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

résultat sera une valeur non négative en cas de succès; sinon renvoie une valeur négative. https://support.hdfgroup.org/HDF5/doc/ RM / RM_H5L.html # Suppression de lien

Comme @MaxLybbert l’a dit, l’espace disque n’est pas récupéré. Vous devez utiliser l'outil de remballage. Cependant, avec HDF5 v.1.10, l’espace peut être récupéré. Mais le guide de l'utilisateur n'est pas encore prêt: https://support.hdfgroup.org/HDF5 /docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top