我正在打開一個用於附加數據的現有HDF5文件;我想確保存在用於後續訪問的名爲/A
的組。我正在尋找一種簡單的方法,可以有條件地創建/A
(如果不存在,則創建並返回新組,或返回現有組)。一種方法是測試/A
的存在。我怎樣纔能有效地做到這一點?hdf5/C++中的測試組存在
根據API文檔,我可以做這樣的事情:
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");
}
但明顯醜陋來自於異常用於溝通這也不例外,在所有信息的事實。
有H5::CommonFG::getObjinfo,它似乎包裝H5Gget_objinfo,以便C例程的返回值的假(不存在)拋出異常;所以再次出現同樣的問題。
在這種情況下,求助於C API還是很乾淨,還是有一些函數直接設計用於測試我忽略的C++ API中的存在?/......在指定位置這樣,你可以測試組/數據集的存在
bool H5Location::attrExists(const char* name) const;
:
它看起來像C++當量的['H5Lexists'](https://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists)不存在的。 'try ... catch ...'似乎比C++更加pythonic,但我認爲或者使用C API是你的兩個選擇。 – Yossarian