2016-02-27 15 views
8

में टेस्ट समूह अस्तित्व मैं डेटा जोड़ने के लिए मौजूदा एचडीएफ 5 फाइल खोल रहा हूं; मैं आश्वस्त करना चाहता हूं कि /A नामक समूह को बाद में पहुंच के लिए मौजूद है। मैं /A सशर्त रूप से बनाने के लिए एक आसान तरीका ढूंढ रहा हूं (यदि मौजूदा नहीं है तो मौजूदा समूह बनाएं और वापस करें, या मौजूदा समूह को वापस करें)। एक तरीका है /A अस्तित्व के लिए परीक्षण करना। मैं इसे कुशलतापूर्वक कैसे कर सकता हूं?एचडीएफ 5/सी ++

एपीआई डॉक्स के अनुसार, मैं कुछ इस तरह कर सकते हैं:

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 को इस तरह से लपेटता है कि सी रूटीन के झूठे (nonexistent) वापसी मूल्य अपवाद फेंकता है; तो फिर एक ही समस्या है।

क्या इस मामले में सी एपीआई को सहारा देना साफ है, या सी ++ एपीआई में मौजूद अस्तित्व का परीक्षण करने के लिए सीधे कुछ फ़ंक्शन डिज़ाइन किया गया है जो मैं देख रहा हूं?/... निर्दिष्ट स्थान पर इस तरह आप समूह/डाटासेट के अस्तित्व का परीक्षण कर सकते

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

:

+0

यह की [ 'H5Lexists'] (https://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists) सब पर मौजूद नहीं है सी ++ बराबर की तरह दिखता है। 'कोशिश करें ... पकड़ो ...' मुझे सी ++ से ज्यादा पाइथोनिक लगता है, लेकिन मुझे लगता है कि या सी एपीआई का उपयोग आपके दो विकल्प हैं। – Yossarian

उत्तर

1

मैं के साथ एक समूह के अस्तित्व का परीक्षण कर रहा हूँ।

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

मुझे 100% की आवश्यकता नहीं है (मुझे अभी भी यह जांचना है कि यह एक समूह है और कुछ अन्य विशेषता नहीं है) लेकिन ऐसा लगता है जितना अच्छा हो सकता है। धन्यवाद! – eudoxos

+1

असल में यह केवल तभी काम करता है जब समूह के नाम पर विशेषता है और यह हमेशा मामला नहीं है ... तो यह सही जवाब नहीं है, क्षमा करें: / – Salamandar

संबंधित मुद्दे