2016-02-27 27 views
8

Veri eklemek için mevcut bir HDF5 dosyasını açıyorum; Sonraki erişim için /A adı verilen grubun var olmasını istiyorum. /A koşullu olarak oluşturmanın kolay bir yolunu arıyorum (var olmadığında yeni grup oluştur ve iade et veya mevcut grubu iade et). Bir yol, /A varlığını test etmektir. Nasıl verimli bir şekilde yapabilirim?Test grubu varlığı hdf5/C++

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

ama bariz çirkinlik istisna hiç olağanüstü değil bilgileri iletmek için kullanılır olmasından kaynaklanır:

API Docs göre, böyle bir şey yapabilirsiniz.

C rutin yanlış (varolmayan) dönüş değeri bir istisna atar öyle bir şekilde H5Gget_objinfo sarmak gibi görünüyor H5::CommonFG::getObjinfo vardır; Yine aynı sorun.

Bu durumda C API'ye başvurmak temiz mi, yoksa doğrudan baktığım C++ API'sinde varlığı test etmek için doğrudan tasarlanmış bir işlev var mı?/... Belirtilen konumda

bool H5Location::attrExists(const char* name) const; 

grup/veri kümesi varlığını test edebilirsiniz O yolu:

+0

Bu [ 'H5Lexists'] (https://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists) hiç de mevcut değildir ve C++ eşdeğer gibi görünüyor. '... yakala ...' bana C++ 'dan çok daha fazla pythonic gibi geliyor, ama sanırım C API'sı iki seçeneğiniz. – Yossarian

cevap

1

Ben bir grubun varlığını test ediyorum.

// Test if empty (= new) H5 file 
auto isNewFile = this->attrExists(VariablesH5GroupName); 
+0

İhtiyacım olan% 100 değil (hala bir grup olup olmadığını kontrol etmeliyim, başka bir özellik değil) ama alabildiği kadar iyi görünüyor. Teşekkürler! – eudoxos

+1

Aslında bu yalnızca grup adlandırılmış bir özniteliğe sahipse çalışır ve bu her zaman böyle olmaz… Yani doğru bir cevap değil, üzgünüm: / – Salamandar