9 #ifndef H5FILE_MISC_HPP
10 #define H5FILE_MISC_HPP
14 #include <H5Fpublic.h>
16 #include "../H5Utility.hpp"
25 inline unsigned convert_open_flag(
unsigned openFlags) {
26 unsigned res_open = 0;
28 res_open |= H5F_ACC_RDONLY;
30 res_open |= H5F_ACC_RDWR;
32 res_open |= H5F_ACC_CREAT;
34 res_open |= H5F_ACC_TRUNC;
36 res_open |= H5F_ACC_EXCL;
42 inline File::File(
const std::string& filename,
unsigned openFlags,
44 openFlags = convert_open_flag(openFlags);
46 unsigned createMode = openFlags & (H5F_ACC_TRUNC | H5F_ACC_EXCL);
47 unsigned openMode = openFlags & (H5F_ACC_RDWR | H5F_ACC_RDONLY);
48 bool mustCreate = createMode > 0;
49 bool openOrCreate = (openFlags & H5F_ACC_CREAT) > 0;
55 std::unique_ptr<SilenceHDF5> silencer;
56 if (openOrCreate) silencer.reset(
new SilenceHDF5());
58 _hid = H5Fopen(filename.c_str(), openMode, fileAccessProps.
getId());
64 createMode = H5F_ACC_EXCL;
66 HDF5ErrMapper::ToException<FileException>(
67 std::string(
"Unable to open file " + filename));
71 if ((
_hid = H5Fcreate(filename.c_str(), createMode, H5P_DEFAULT,
72 fileAccessProps.
getId())) < 0) {
73 HDF5ErrMapper::ToException<FileException>(
74 std::string(
"Unable to create file " + filename));
79 if (_filename.empty()) {
80 _filename = details::get_name([
this](
char* buffer, hsize_t length) {
81 return H5Fget_name(
getId(), buffer,
static_cast<size_t>(length));
88 if (H5Fflush(
_hid, H5F_SCOPE_GLOBAL) < 0) {
89 HDF5ErrMapper::ToException<FileException>(
90 std::string(
"Unable to flush file " +
getName()));
void flush()
flush
Definition: H5File_misc.hpp:87
File(const std::string &filename, unsigned openFlags=ReadOnly, const FileAccessProps &fileAccessProps=FileAccessProps::Default())
File.
Definition: H5File_misc.hpp:42
@ Truncate
Open flag: Truncate a file if already existing.
Definition: H5File.hpp:37
@ Create
Open flag: Create non existing file.
Definition: H5File.hpp:43
@ ReadOnly
Open flag: Read only access.
Definition: H5File.hpp:33
@ ReadWrite
Open flag: Read Write access.
Definition: H5File.hpp:35
@ Excl
Open flag: Open will fail if file already exist.
Definition: H5File.hpp:39
const std::string & getName() const noexcept
Return the name of the file.
Definition: H5File_misc.hpp:78
hid_t getId() const noexcept
getId
Definition: H5Object_misc.hpp:55
bool isValid() const noexcept
isValid
Definition: H5Object_misc.hpp:51
hid_t _hid
Definition: H5Object.hpp:87
HDF5 property Lists.
Definition: H5PropertyList.hpp:62
Utility class to disable HDF5 stack printing inside a scope.
Definition: H5Utility.hpp:20
Definition: H5_definitions.hpp:15