HDF5: Improvements in data file and master file safety.
This commit is contained in:
+22
-8
@@ -78,11 +78,22 @@ std::optional<HDF5DataFileStatistics> HDF5DataFile::Close() {
|
||||
data_set->Close();
|
||||
data_set.reset();
|
||||
}
|
||||
data_file->Close();
|
||||
data_file.reset();
|
||||
|
||||
if (manage_file && (!std::filesystem::exists(filename.c_str()) || overwrite))
|
||||
std::rename(tmp_filename.c_str(), filename.c_str());
|
||||
if (manage_file ) {
|
||||
data_file->Close();
|
||||
data_file.reset();
|
||||
|
||||
if (std::filesystem::exists(filename) && !overwrite)
|
||||
throw JFJochException(JFJochExceptionCategory::FileWriteError, "File already exists");
|
||||
std::error_code ec;
|
||||
std::filesystem::rename(tmp_filename, filename, ec);
|
||||
if (ec)
|
||||
throw JFJochException(JFJochExceptionCategory::FileWriteError,
|
||||
"Cannot rename temporary HDF5 file " + tmp_filename +
|
||||
" to " + filename + ": " + ec.message());
|
||||
} else {
|
||||
data_file.reset();
|
||||
}
|
||||
|
||||
closed = true;
|
||||
|
||||
@@ -92,16 +103,19 @@ std::optional<HDF5DataFileStatistics> HDF5DataFile::Close() {
|
||||
ret.filename = filename;
|
||||
ret.file_number = file_number + 1;
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
HDF5DataFile::~HDF5DataFile() {
|
||||
if (data_file) {
|
||||
try {
|
||||
data_set->Close();
|
||||
data_file->Close();
|
||||
std::filesystem::remove(tmp_filename);
|
||||
data_set.reset();
|
||||
data_set_image_number.reset();
|
||||
data_file.reset();
|
||||
if (manage_file) {
|
||||
std::error_code ec;
|
||||
std::filesystem::remove(tmp_filename, ec);
|
||||
}
|
||||
} catch (const std::exception &e) {
|
||||
std::cerr << "HDF5DataFile::~HDF5DataFile: " << e.what() << std::endl;
|
||||
} catch (...) {
|
||||
|
||||
Reference in New Issue
Block a user