Domanda

Vorrei modificare a livello di codice i dati associati a un set di dati in un file HDF5. Non riesco a trovare un modo per eliminare un set di dati per nome (permettendomi di aggiungerlo di nuovo con i dati modificati) o aggiornare un set di dati per nome. Sto usando l'API C per HDF5 1.6.x ma i puntatori verso qualsiasi API HDF5 sarebbero utili.

È stato utile?

Soluzione

Secondo il manuale dell'utente :

  

HDF5 non fornisce attualmente un semplice meccanismo per rimuovere un set di dati da un file o per recuperare lo spazio di archiviazione occupato da un oggetto eliminato.

Una cancellazione così semplice sembra essere fuori discussione. Ma la sezione continua:

  

La rimozione di un set di dati e il recupero dello spazio utilizzato può essere eseguito con la funzione H5Ldelete e la h5repack . Con la funzione H5Ldelete , i collegamenti a un set di dati possono essere rimossi dalla struttura del file. Dopo che tutti i collegamenti sono stati rimossi, il set di dati diventa inaccessibile a qualsiasi applicazione e viene effettivamente rimosso dal file. Il modo per recuperare lo spazio occupato da un set di dati non collegato è quello di scrivere tutti gli oggetti del file in un nuovo file. Qualsiasi oggetto non collegato è inaccessibile all'applicazione e non verrà incluso nel nuovo file. La scrittura di oggetti in un nuovo file può essere eseguita con un programma personalizzato o con il programma di utilità h5repack .

Altri suggerimenti

Se si desidera eliminare un set di dati in c ++ sono necessari i seguenti comandi:

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

il risultato sarà un valore non negativo in caso di successo; altrimenti restituisce un valore negativo. https://support.hdfgroup.org/HDF5/doc/ RM / RM_H5L.html # link-Delete

Come ha detto @MaxLybbert, lo spazio sul disco rigido non viene recuperato. È necessario utilizzare lo strumento di reimballaggio. Tuttavia, con HDF5 v.1.10 è possibile recuperare lo spazio. Ma la guida per l'utente non è ancora pronta: https://support.hdfgroup.org/HDF /docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top