to remove tmp file

This commit is contained in:
azakir 2020-12-16 10:31:52 +01:00
parent b099bfe29f
commit abe3e0bbe9
4 changed files with 100 additions and 11 deletions

View File

@ -37,6 +37,17 @@
#include <cstring> #include <cstring>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
static std::string removeFile(std::string fileName, int& notOk)
{
std::string errStr;
notOk = std::remove(fileName.c_str());
if (notOk) errStr = ToComment(" \n error while removing file : ")
<< fileName;
else errStr= ToComment("\n file : ")<< fileName << " succesfully deleted! \n ";
return errStr;
}
namespace namespace
{ {
struct GET_DEFAULT // struct used to get default value from GetOptionValue() struct GET_DEFAULT // struct used to get default value from GetOptionValue()
@ -484,7 +495,9 @@ throw (std::invalid_argument)
if (op_val->second != optionValue) if (op_val->second != optionValue)
{ {
const char* ptr = optionValue.c_str();
std::string lowerOptionValue = toLowerStr(optionValue);
const char* ptr = lowerOptionValue.c_str();
// strip white spaces // strip white spaces
while (ptr[0] == ' ') while (ptr[0] == ' ')
ptr++; ptr++;
@ -581,6 +594,18 @@ throw (std::invalid_argument)
return val; return val;
} }
//================================================================================ //================================================================================
/*!
* \brief Converts a string to a lower
*/
//================================================================================
std::string MgAdapt::toLowerStr(const std::string& str)
{
std::string s = str;
for ( size_t i = 0; i <= s.size(); ++i )
s[i] = tolower( s[i] );
return s;
}
//================================================================================
/*! /*!
* \brief Converts a string to a bool * \brief Converts a string to a bool
*/ */
@ -675,6 +700,7 @@ int MgAdapt::compute(std::string& errStr)
{ {
convertMeshFile(meshFormatOutputMesh, solFormatOutput); convertMeshFile(meshFormatOutputMesh, solFormatOutput);
} }
//~if (!err) cleanUp();
return err; return err;
} }
@ -682,8 +708,19 @@ void MgAdapt::execCmd( const char* cmd, int& err)
{ {
err = 1; err = 1;
std::array <char, 128> buffer; std::array <char, 128> buffer;
std:: ofstream logStream; std::streambuf* buf;
logStream.open(logFile); outFileStream fileStream;
if (printLogInFile)
{
fileStream.open(logFile);
buf = fileStream.rdbuf();
}
else
{
buf = std::cout.rdbuf();
}
std::ostream logStream(buf);
std::unique_ptr <FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose ); std::unique_ptr <FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose );
if(!pipe) if(!pipe)
{ {
@ -693,9 +730,34 @@ void MgAdapt::execCmd( const char* cmd, int& err)
{ {
logStream<<buffer.data() ; logStream<<buffer.data() ;
} }
logStream.close();
err = 0; err = 0;
} }
void MgAdapt::cleanUp()
{
int notOk;
std::string errStr;
if(removeOnSuccess) tmpFilesToBeDeleted.push_back(logFile);
std::vector< std::string>::iterator it = tmpFilesToBeDeleted.begin();
for (; it!=tmpFilesToBeDeleted.end(); ++it)
{
errStr=removeFile(*it, notOk);
if (notOk)
{
appendMsgToLogFile(errStr);
}
}
}
void MgAdapt::appendMsgToLogFile(std::string& msg)
{
std::ofstream logStream;
logStream.open(logFile, std::ofstream::out | std::ofstream::app);
logStream<< msg;
logStream.close();
}
//================================================================================ //================================================================================
/*! /*!
* \brief Return command to run MG-Tetra mesher excluding file prefix (-f) * \brief Return command to run MG-Tetra mesher excluding file prefix (-f)
@ -717,6 +779,8 @@ std::string MgAdapt::getCommandToRun()
errStr = ToComment(" failed to find .mesh or .sol file from converter ")<< strerror( errno ); errStr = ToComment(" failed to find .mesh or .sol file from converter ")<< strerror( errno );
return errStr; return errStr;
} }
tmpFilesToBeDeleted.push_back(meshIn);
tmpFilesToBeDeleted.push_back(solFileIn);
if(useBackgroundMap && !isFileExist(sizeMapIn)) if(useBackgroundMap && !isFileExist(sizeMapIn))
{ {
@ -724,8 +788,7 @@ std::string MgAdapt::getCommandToRun()
return errStr; return errStr;
} }
meshFormatOutputMesh = meshIn;
solFormatOutput.push_back(solFileIn);
cmd+= " --in "+ meshIn; cmd+= " --in "+ meshIn;
meshFormatOutputMesh = getFileName()+".mesh"; meshFormatOutputMesh = getFileName()+".mesh";
@ -735,12 +798,22 @@ std::string MgAdapt::getCommandToRun()
{ {
cmd+= " --background_mesh "+ sizeMapIn ; cmd+= " --background_mesh "+ sizeMapIn ;
cmd+= " --background_sizemap "+ solFileIn; cmd+= " --background_sizemap "+ solFileIn;
tmpFilesToBeDeleted.push_back(sizeMapIn);
} }
//~else //~else
//~{ //~{
//~// constant value TODO //~// constant value TODO
//~} //~}
/* sizemap file is not adapted in case of only surface adaptation see MeshGems docs */
std::string adapOp = "adaptation";
std::string adpOpVal = getOptionValue(adapOp);
std::string surfaceAdapt = "surface";
if(surfaceAdapt != adpOpVal )
{
std::string solFileOut = getFileName()+".sol";
cmd+= " --write_sizemap "+ solFileOut;
solFormatOutput.push_back(solFileOut);
}
if (verbosityLevel != defaultVerboseLevel()) if (verbosityLevel != defaultVerboseLevel())
{ {
@ -1298,7 +1371,8 @@ void MgAdapt::getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit
if ( erreur < 0 ) if ( erreur < 0 )
{ {
//~addMessage( ToComment(" error: error while reading field last time step ") << nomcha << " in file " << aFile , /*fatal=*/true ); //~addMessage( ToComment(" error: error while reading field ") << nomcha << "step (numdt, numit) = " <<"("<< numdt<< ", " \
numit<< ")" <<" in file " << aFile , /*fatal=*/true );
return; return;
} }

View File

@ -60,7 +60,10 @@ struct MgAdaptHypothesisData
}; };
class outFileStream : public std::ofstream{
public:
~outFileStream(){close();} //to close file at dtor
};
/*! /*!
* \brief Class to generate string from any type * \brief Class to generate string from any type
@ -211,6 +214,7 @@ public:
static double toDbl(const std::string&, bool* isOk = 0) throw (std::invalid_argument); static double toDbl(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
static bool toBool(const std::string&, bool* isOk = 0) throw (std::invalid_argument); static bool toBool(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
static int toInt(const std::string&, bool* isOk = 0 ) throw (std::invalid_argument); static int toInt(const std::string&, bool* isOk = 0 ) throw (std::invalid_argument);
static std::string toLowerStr(const std::string& str);
/* default values */ /* default values */
@ -308,6 +312,7 @@ private :
std::vector< std::string> solFormatOutput; std::vector< std::string> solFormatOutput;
std::vector <group> groupVec; std::vector <group> groupVec;
std::vector <family> famVec; std::vector <family> famVec;
std::vector< std::string> tmpFilesToBeDeleted;
/* convert MED-->.mesh format */ /* convert MED-->.mesh format */
void convertMedFile(std::string& meshIn,std::string& solFileIn, std::string& sizeMapIn) ; void convertMedFile(std::string& meshIn,std::string& solFileIn, std::string& sizeMapIn) ;
@ -325,6 +330,8 @@ private :
med_idt openMedFile(const std::string aFile) ; med_idt openMedFile(const std::string aFile) ;
bool isFileExist(std::string& fName) const; bool isFileExist(std::string& fName) const;
void execCmd( const char* cmd, int& err); void execCmd( const char* cmd, int& err);
void cleanUp();
void appendMsgToLogFile(std::string& msg);
}; };

View File

@ -947,6 +947,7 @@ MgAdaptAdvWidget::MgAdaptAdvWidget( QWidget* parent, std::vector <std::string>*
connect( myOptionTable, SIGNAL( itemChanged(QTreeWidgetItem *, int)), SLOT( itemChanged(QTreeWidgetItem *, int ))); connect( myOptionTable, SIGNAL( itemChanged(QTreeWidgetItem *, int)), SLOT( itemChanged(QTreeWidgetItem *, int )));
connect( addBtn, SIGNAL( clicked() ), this, SLOT( onAddOption() ) ); connect( addBtn, SIGNAL( clicked() ), this, SLOT( onAddOption() ) );
connect(workingDirectoryPushButton, SIGNAL(pressed()), this, SLOT(_onWorkingDirectoryPushButton()));
} }
MgAdaptAdvWidget::~MgAdaptAdvWidget() MgAdaptAdvWidget::~MgAdaptAdvWidget()
@ -1120,6 +1121,11 @@ void MgAdaptAdvWidget::setupWidget()
// QMetaObject::connectSlotsByName(this); // QMetaObject::connectSlotsByName(this);
} }
void MgAdaptAdvWidget::_onWorkingDirectoryPushButton()
{
QString aDirName=QFileDialog::getExistingDirectory ();
if (!(aDirName.isEmpty()))workingDirectoryLineEdit->setText(aDirName);
}
namespace namespace
{ {

View File

@ -280,6 +280,8 @@ public slots:
void onAddOption(); void onAddOption();
void itemChanged(QTreeWidgetItem * tblRow, int column); void itemChanged(QTreeWidgetItem * tblRow, int column);
private slots:
void _onWorkingDirectoryPushButton();
}; };