【问题标题】:Reading an HDF5 file not properly closed读取未正确关闭的 HDF5 文件
【发布时间】:2014-06-07 07:06:10
【问题描述】:

如果一个 HDF5 文件没有用 H5close() 关闭或者 hdfview 无法读取它。在常规应用程序中,HDF5 文件会正确关闭,但有时代码会出现问题(例如段错误)并且文件未关闭。在这些情况下,查看 HDF5 文件中可能包含的内容可能有助于深入了解错误原因。

有没有办法做到这一点?

【问题讨论】:

    标签: c++ hdf5


    【解决方案1】:

    您通常可以按照standard RAII (Resource Acquisition is Initialization) paradigm 安全地引用 HDF5 文件异常。但是,这不会保护您免受由操作系统生成的程序中断的段错误,除非您捕获中断并关闭文件。

    对于更简单的异常安全情况,这可以通过几个最佳实践来实现。首先,在调用对象构造函数期间获取资源。编写一个复制构造函数并重载赋值运算符以正确转移文件句柄的所有权,而不是简单地从两个位置保存指针。最后,为正确关闭文件句柄的对象编写析构函数。

    【讨论】:

    • 很好的答案!文件句柄的“正确转移所有权”是什么意思?不就是简单的传递file_id吗?
    • 因此,如果您复制对象并且两个对象都持有相同的文件句柄,并且其中一个超出范围或被删除,则另一个对象将保留关闭文件的文件句柄。您需要(在复制时)将文件句柄移动到新对象并从旧对象中释放对它的所有声明。 C++11 引入了移动语义来处理这种用例。
    • 我现在知道了!谢谢!
    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多