Ich öffne eine vorhandene HDF5-Datei zum Anhängen von Daten; Ich möchte sicherstellen, dass die Gruppe /A
für den nachfolgenden Zugriff existiert. Ich bin auf der Suche nach einer einfachen Möglichkeit, entweder /A
bedingt zu erstellen (erstellen und neue Gruppe zurückgeben, wenn nicht vorhanden, oder die vorhandene Gruppe zurückgeben). Eine Möglichkeit besteht darin, auf /A
Existenz zu testen. Wie kann ich es effizient machen?Testgruppenexistenz in hdf5/C++
Nach der API-Dokumentation, ich kann etwas tun:
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");
}
aber die offensichtliche Hässlichkeit kommt von der Tatsache, dass Ausnahmeinformationen zu kommunizieren, verwendet werden, die überhaupt nicht außergewöhnlich ist.
Es gibt H5::CommonFG::getObjinfo, die H5Gget_objinfo in der Weise zu wickeln scheint, dass falscher (nicht vorhandener) Rückgabewert der C-Routine eine Ausnahme auslöst; Also nochmal das selbe Problem.
Ist es in diesem Fall clean, auf die C-API zurückzugreifen, oder gibt es eine Funktion, die direkt dazu dient, die Existenz in der C++ API zu testen, die ich übersehen habe?
Es sieht aus wie die C++ Äquivalent [ 'H5Lexists'] (https://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists) gar nicht existieren. Das 'try ... catch ...' scheint mir viel pythischer als C++ zu sein, aber ich denke, dass oder die Verwendung der C API sind Ihre zwei Möglichkeiten. – Yossarian