質問

HDF5ファイル内のデータセットに関連付けられたデータをプログラムで変更したいと思います。名前でデータセットを削除する(変更されたデータで再度追加できるようにする)か、名前でデータセットを更新する方法を見つけることができないようです。私はHDF5 1.6.xのC APIを使用していますが、HDF5 APIへのポインターが役立つでしょう。

役に立ちましたか?

解決

ユーザーガイドによると

  

HDF5は、現時点では、ファイルからデータセットを削除したり、削除されたオブジェクトが占有しているストレージスペースを再生するための簡単なメカニズムを提供していません。

したがって、単純な削除は問題外のようです。しかし、セクションは続きます:

  

データセットを削除し、使用したスペースを取り戻すには、 H5Ldelete 関数と h5repack ユーティリティプログラム。 H5Ldelete 関数を使用すると、データセットへのリンクをファイル構造から削除できます。すべてのリンクが削除されると、データセットはどのアプリケーションからもアクセスできなくなり、ファイルから事実上削除されます。リンクされていないデータセットによって占有されているスペースを回復する方法は、ファイルのすべてのオブジェクトを新しいファイルに書き込むことです。リンクされていないオブジェクトはアプリケーションにアクセスできず、新しいファイルには含まれません。オブジェクトを新しいファイルに書き込むには、カスタムプログラムまたは h5repack ユーティリティプログラムを使用します。

他のヒント

c ++でデータセットを削除する場合は、次のコマンドが必要です。

H5File m_h5File (pathAndNameToHDF5File, H5F_ACC_RDWR); //The hdf5 c++ object.
std::string channelName = "/myGroup/myDataset";
int result = H5Ldelete(m_h5File.getId(), channelName.data(), H5P_DEFAULT);

成功した場合、結果は負でない値になります。そうでない場合は負の値を返します。 https://support.hdfgroup.org/HDF5/doc/ RM / RM_H5L.html#Link-Delete

@MaxLybbertが言ったように、ハードディスクの容量は回復されません。再パックツールを使用する必要があります。 ただし、HDF5 v.1.10では、スペースを回復できます。しかし、ユーザーガイドはまだ準備ができていません: https://support.hdfgroup.org/HDF5 /docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top