【问题标题】:Function to clone HDF5 file via C++通过 C++ 克隆 HDF5 文件的功能
【发布时间】:2016-05-25 23:29:59
【问题描述】:

提前感谢您的宝贵时间。

关于克隆 HDF5 文件的最佳/最简单方法(即在磁盘中制作副本),我有一个相当简单的问题。例如,有一个 HDF5 文件:file.h5。我想将此文件的内容复制到 file_BU.h5 中。这样做的原因是,我写入文件的工作有可能在写入过程中被终止(写入多个数据集),我希望在每一“代”写入之间进行备份,以便我可以恢复最近的良好状态。

当然,我可以使用普通的文件复制代码,例如Copy a file in a sane, safe and efficient way(或天真的系统(“cp file.h5 file_BU.h5”))。但是,这是一个特定于 HDF5 的问题——我想知道是否有一个函数可以克隆()一个 HDF5 文件。示例代码sn-p如下:

H5::H5File file;
file = H5::H5File( "file.h5", H5F_ACC_TRUNC );
//TODO Write datasets etc. to file
std::string file2name = "file_BU.h5";

//This is the thing I would like to do:
file.clone( file2name );
file.close();

//file_BU.h5 and file.h5 are now identical on disk...

【问题讨论】:

  • 反对在文件系统级别进行复制的原因是什么?我可以看到解析和重新格式化文件的唯一优点是,在某种程度上,它验证了文件的完整性。但它也会更慢,而且可能不会更容易。
  • 感谢您提出的好问题。除了可能有一个 HDF5 库函数可以从 H5::H5File 中工作之外,没有其他原因,而不必知道它打开的文件名的字符串......
  • 您为什么不使用std::fstream 将您的文件作为二进制文件读取到std::string,然后再将其写入另一个文件?为什么这必须是特定于 HDF5 的?你愿意这样做只是为了好玩吗?

标签: c++ linux c++11 hdf5


【解决方案1】:

我没有检查整个文档,但最接近您正在寻找的似乎是 https://www.hdfgroup.org/HDF5/doc/RM/RM_H5O.html#Object-Copy ,但您显然需要编写一些函数来复制整个内容。
您可以在https://www.hdfgroup.org/HDF5/doc/RM/RM_H5Front.html#LowLevelAPIs 此处查看其余可用功能,我还将查看h5copy 命令行工具的来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2016-12-22
    相关资源
    最近更新 更多