Salome HOME
bos #17005 [CEA][Windows] cannot save study.
authorrnv <rnv@opencascade.com>
Wed, 29 Jan 2020 17:11:07 +0000 (20:11 +0300)
committerrnv <rnv@opencascade.com>
Wed, 29 Jan 2020 17:11:07 +0000 (20:11 +0300)
src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx

index 579bf23489b27db03c47d49c9524304256a5f744..05fa40fb476b972295b2f284e252bad7e425809d 100644 (file)
@@ -801,13 +801,23 @@ bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
     if ((fgets(buffer, 2046, fp)) == NULL) break;
     size_t aLen = strlen(buffer);
     if (buffer[aLen-1] == '\n') buffer[aLen-1] = char(0);
-#ifdef WIN32
-    aCmd = "move /Y \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl) +"\" 2>NUL";
+
+#ifdef WIN32    
+       // Force removing readonly attribute from a file under Windows, because of a but in the HDF
+    std::string aReadOlnyRmCmd = "attrib -r \"" + aStudyTmpDir + std::string(buffer)+ "\" > nul 2>&1";
+#ifdef UNICODE
+    std::wstring awReadOlnyRmCmd = Kernel_Utils::utf8_decode_s(aReadOlnyRmCmd);
+    _wsystem(awReadOlnyRmCmd.c_str());
+#else  
+    system(aReadOlnyRmCmd.c_str());
+#endif
+
+    aCmd = "move /Y \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl) +"\" > nul 2>&1";
 #else
     aCmd = "mv -f \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl)+"\"";
 #endif
 #if defined(WIN32) && defined(UNICODE)
-       std::wstring awCmd = Kernel_Utils::utf8_decode_s(aCmd);
+    std::wstring awCmd = Kernel_Utils::utf8_decode_s(aCmd);
     errors = _wsystem(awCmd.c_str());
 #else  
     errors = system(aCmd.c_str());