Fix the problem with saving a file with several meshes under Windows.

This commit is contained in:
rnv 2020-05-07 17:14:56 +03:00
parent eb7803d480
commit 20d7486abe

View File

@ -28,6 +28,10 @@
#include <med_err.h> #include <med_err.h>
#include <med_proto.h> #include <med_proto.h>
#ifdef WIN32
#include <windows.h>
#endif
#include <boost/version.hpp> #include <boost/version.hpp>
#ifdef _DEBUG_ #ifdef _DEBUG_
@ -100,6 +104,23 @@ namespace MED
{ {
if (myCount++ == 0) { if (myCount++ == 0) {
const char* aFileName = myFileName.c_str(); const char* aFileName = myFileName.c_str();
#ifdef WIN32
if (med_access_mode(theMode) == MED_ACC_RDWR) {
// Force removing readonly attribute from a file under Windows, because of a bug in the HDF5
std::string aReadOlnyRmCmd = "attrib -r \"" + myFileName + "\"> nul 2>&1";
#ifdef UNICODE
const char* to_decode = aReadOlnyRmCmd.c_str();
int size_needed = MultiByteToWideChar(CP_UTF8, 0, to_decode, strlen(to_decode), NULL, 0);
wchar_t* awReadOlnyRmCmd = new wchar_t[size_needed + 1];
MultiByteToWideChar(CP_UTF8, 0, to_decode, strlen(to_decode), awReadOlnyRmCmd, size_needed);
awReadOlnyRmCmd[size_needed] = '\0';
_wsystem(awReadOlnyRmCmd);
delete[] awReadOlnyRmCmd;
#else
system(aReadOlnyRmCmd.c_str());
#endif
}
#endif
myFid = MEDfileVersionOpen(aFileName,med_access_mode(theMode), myMajor, myMinor, MED_RELEASE_NUM); myFid = MEDfileVersionOpen(aFileName,med_access_mode(theMode), myMajor, myMinor, MED_RELEASE_NUM);
} }
if (theErr) if (theErr)