【发布时间】: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 的?你愿意这样做只是为了好玩吗?