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 <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
{
struct GET_DEFAULT // struct used to get default value from GetOptionValue()
@ -484,7 +495,9 @@ throw (std::invalid_argument)
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
while (ptr[0] == ' ')
ptr++;
@ -581,6 +594,18 @@ throw (std::invalid_argument)
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
*/
@ -662,7 +687,7 @@ std::string MgAdapt::getCommandToRun(MgAdapt* hyp)
int MgAdapt::compute(std::string& errStr)
{
std::string cmd= getCommandToRun();
std::string cmd = getCommandToRun();
int err = 0;
execCmd( cmd.c_str(), err ); // run
@ -675,6 +700,7 @@ int MgAdapt::compute(std::string& errStr)
{
convertMeshFile(meshFormatOutputMesh, solFormatOutput);
}
//~if (!err) cleanUp();
return err;
}
@ -682,8 +708,19 @@ void MgAdapt::execCmd( const char* cmd, int& err)
{
err = 1;
std::array <char, 128> buffer;
std:: ofstream logStream;
logStream.open(logFile);
std::streambuf* buf;
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 );
if(!pipe)
{
@ -693,9 +730,34 @@ void MgAdapt::execCmd( const char* cmd, int& err)
{
logStream<<buffer.data() ;
}
logStream.close();
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)
@ -717,6 +779,8 @@ std::string MgAdapt::getCommandToRun()
errStr = ToComment(" failed to find .mesh or .sol file from converter ")<< strerror( errno );
return errStr;
}
tmpFilesToBeDeleted.push_back(meshIn);
tmpFilesToBeDeleted.push_back(solFileIn);
if(useBackgroundMap && !isFileExist(sizeMapIn))
{
@ -724,8 +788,7 @@ std::string MgAdapt::getCommandToRun()
return errStr;
}
meshFormatOutputMesh = meshIn;
solFormatOutput.push_back(solFileIn);
cmd+= " --in "+ meshIn;
meshFormatOutputMesh = getFileName()+".mesh";
@ -735,12 +798,22 @@ std::string MgAdapt::getCommandToRun()
{
cmd+= " --background_mesh "+ sizeMapIn ;
cmd+= " --background_sizemap "+ solFileIn;
tmpFilesToBeDeleted.push_back(sizeMapIn);
}
//~else
//~{
//~// 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())
{
@ -1298,7 +1371,8 @@ void MgAdapt::getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit
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;
}

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
@ -211,6 +214,7 @@ public:
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 int toInt(const std::string&, bool* isOk = 0 ) throw (std::invalid_argument);
static std::string toLowerStr(const std::string& str);
/* default values */
@ -308,6 +312,7 @@ private :
std::vector< std::string> solFormatOutput;
std::vector <group> groupVec;
std::vector <family> famVec;
std::vector< std::string> tmpFilesToBeDeleted;
/* convert MED-->.mesh format */
void convertMedFile(std::string& meshIn,std::string& solFileIn, std::string& sizeMapIn) ;
@ -325,6 +330,8 @@ private :
med_idt openMedFile(const std::string aFile) ;
bool isFileExist(std::string& fName) const;
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( addBtn, SIGNAL( clicked() ), this, SLOT( onAddOption() ) );
connect(workingDirectoryPushButton, SIGNAL(pressed()), this, SLOT(_onWorkingDirectoryPushButton()));
}
MgAdaptAdvWidget::~MgAdaptAdvWidget()
@ -1120,6 +1121,11 @@ void MgAdaptAdvWidget::setupWidget()
// QMetaObject::connectSlotsByName(this);
}
void MgAdaptAdvWidget::_onWorkingDirectoryPushButton()
{
QString aDirName=QFileDialog::getExistingDirectory ();
if (!(aDirName.isEmpty()))workingDirectoryLineEdit->setText(aDirName);
}
namespace
{

View File

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