Sto aprendo un file HDF5 esistente per l'aggiunta di dati; Voglio assicurare che il gruppo chiamato /A
esista per l'accesso successivo. Sto cercando un modo semplice per creare /A
condizionatamente (creare e restituire nuovo gruppo se non esistente o restituire il gruppo esistente). Un modo è quello di verificare l'esistenza di /A
. Come posso farlo in modo efficiente?Esistenza del gruppo di test in hdf5/C++
Secondo la documentazione API, posso fare qualcosa di simile:
H5::H5File h5file(filename,H5F_ACC_RDWR);
H5::H5Group grp;
try{
grp=h5file.openGroup("A");
} catch(H5::Exception& e){
/* group does not exists, create it */
grp=h5file.createGroup("A");
}
ma la bruttezza evidente deriva dal fatto che un'eccezione viene utilizzato per comunicare informazioni che non è eccezionale a tutti.
C'è H5::CommonFG::getObjinfo, che sembra avvolgere H5Gget_objinfo in modo tale che il valore di ritorno falso (inesistente) della routine C genera un'eccezione; quindi ancora lo stesso problema.
È pulito ricorrere all'API C in questo caso, oppure esiste qualche funzione direttamente progettata per testare l'esistenza nell'API C++ che sto trascurando?
Sembra che il C++ equivalente di [ 'H5Lexists'] (https://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists) non esiste affatto. Il 'try ... catch ...' sembra molto più pitone di C++ per me, ma penso che o usando l'API C sono le tue due opzioni. – Yossarian