2016-02-27 12 views
8

データを追加するための既存のHDF5ファイルを開きます。後でアクセスするために/Aというグループが存在することを保証したいと思います。私は/Aを条件付きで作成する簡単な方法を探しています(存在しない場合は新規グループを作成して返します)、既存のグループを返します。 1つの方法は、/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があります。これは、Cルーチンのfalse(存在しない)戻り値が例外をスローするようにH5Gget_objinfoをラップするように見えます。もう一度同じ問題です。

この場合、C APIに頼るのはきれいですか、または私が見落としているC++ APIに存在をテストするために直接設計された関数がありますか?

+0

[ 'H5Lexists'](https://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists)のC++と同等がまったく存在していないように見えます。 'try ... catch ...'は私にとってはC++よりもはるかに難色だと思われますが、C APIを使うことはあなたの2つの選択肢だと思います。 – Yossarian

答えて

1

私が持つグループの存在をテストしてい:あなたはグループ/セット/の存在をテストすることができる方法...指定された場所に

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

を。

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

私が必要としていたものは100%ではありませんでした(私はまだそれがグループで、他の属性ではないかどうかを確認する必要があります)。ありがとう! – eudoxos

+1

実際には、グループに名前付き属性があり、それが常にそうであるとは限りません。これは正解ではありません。 – Salamandar

関連する問題