X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Mesh_i.cxx;h=d6b5b420d0971bdf4702fd0985a2b334f4e6ca3a;hb=b3c1fef0ed18605e7a74e216e6fc58bf2b3f4316;hp=0fa06e0406a730b5d69f0abafefbbff655b074ea;hpb=812bdd937f13c483550a1623c9b2510a1fc7e7a8;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 0fa06e040..d6b5b420d 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -40,17 +40,23 @@ #include "Utils_SINGLETON.hxx" #include "OpUtil.hxx" -#include "TCollection_AsciiString.hxx" #include "SMESHDS_Command.hxx" #include "SMESHDS_CommandType.hxx" #include "SMESH_MeshEditor_i.hxx" #include "SMESH_Gen_i.hxx" #include "DriverMED_R_SMESHDS_Mesh.h" +// OCCT Includes +#include +#include +#include +#include #include #include #include +#include +// STL Includes #include #include #include @@ -1058,17 +1064,59 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() //============================================================================= /*! - * + * Export */ //============================================================================= +static void PrepareForWriting (const char* file) +{ + TCollection_AsciiString aFullName ((char*)file); + OSD_Path aPath (aFullName); + OSD_File aFile (aPath); + if (aFile.Exists()) { + // existing filesystem node + if (aFile.KindOfFile() == OSD_FILE) { + if (aFile.IsWriteable()) { + aFile.Reset(); + aFile.Remove(); + if (aFile.Failed()) { + TCollection_AsciiString msg ("File "); + msg += aFullName + " cannot be replaced."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } else { + TCollection_AsciiString msg ("File "); + msg += aFullName + " cannot be overwritten."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } else { + TCollection_AsciiString msg ("Location "); + msg += aFullName + " is not a file."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } + } else { + // nonexisting file; check if it can be created + aFile.Reset(); + aFile.Build(OSD_WriteOnly, OSD_Protection()); + if (aFile.Failed()) { + TCollection_AsciiString msg ("You cannot create the file "); + msg += aFullName + ". Check the directory existance and access rights."; + THROW_SALOME_CORBA_EXCEPTION(msg.ToCString(), SALOME::BAD_PARAM); + } else { + aFile.Close(); + aFile.Remove(); + } + } +} + void SMESH_Mesh_i::ExportToMED( const char* file, CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion ) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); - + + PrepareForWriting(file); char* aMeshName = "Mesh"; SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); if ( !aStudy->_is_nil() ) { @@ -1110,17 +1158,20 @@ void SMESH_Mesh_i::ExportMED( const char* file, void SMESH_Mesh_i::ExportDAT(const char *file) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); + PrepareForWriting(file); _impl->ExportDAT(file); } void SMESH_Mesh_i::ExportUNV(const char *file) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); + PrepareForWriting(file); _impl->ExportUNV(file); } void SMESH_Mesh_i::ExportSTL(const char *file, const bool isascii) throw(SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); + PrepareForWriting(file); _impl->ExportSTL(file, isascii); }