//+------------------------------------------------------------------+ //| File.mqh | //| Copyright 2026,Niquel Mendoza. | //| https://www.mql5.com/en/users/nique_372 | //+------------------------------------------------------------------+ #property copyright "Copyright 2026,Niquel Mendoza." #property link "https://www.mql5.com/en/users/nique_372" #property strict #ifndef WORKFLOWSBYLEO_STEPS_FILE_MQH #define WORKFLOWSBYLEO_STEPS_FILE_MQH //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include "..\\Final\\Orquestador.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CWorkStepFileWrite : public CWorkflowStep { private: string m_content; int m_file_flags; string m_file_name; public: CWorkStepFileWrite(void) : CWorkflowStep("WriteInFile", "File", false, 0) {} ~CWorkStepFileWrite(void) {} //--- bool Init(const CYmlNode& parameters) override final; int Run() override final; }; //--- WORKFLOWS_FACTORY_DEFINE_CREATOR(CWorkStepFileWrite, FileFileWrite, "WriteInFile", "File") //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CWorkStepFileWrite::Init(const CYmlNode ¶meters) { //--- File flags m_file_flags = FILE_WRITE; CYmlIteratorArray itarr = parameters["open_flags"].BeginArr(); while(itarr.IsValid()) { int v = 0; const string val = m_wf.TranslateStr(itarr.Val(), ""); if(CEnumReg::s_dict.TryGetAs(val, v)) { m_file_flags |= v; } itarr.Next(); } //--- m_content = m_wf.TranslateStr(parameters["content"], ""); //--- m_file_name = m_wf.TranslateStr(parameters["file_name"], ""); //--- return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CWorkStepFileWrite::Run(void) { ::ResetLastError(); const int fh = FileOpen(m_file_name, m_file_flags); if(fh == INVALID_HANDLE) { LogError(StringFormat("Fallo al abrir el archivo %s, ultimo err = %d", m_file_name, ::GetLastError()), FUNCION_ACTUAL); return ::GetLastError() == 0 ? 1 : (::GetLastError()); } FileWriteString(fh, m_content); FileClose(fh); return 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CWorkStepFileDelete : public CWorkflowStep { private: int m_common_flag; string m_file_name; public: CWorkStepFileDelete(void) : CWorkflowStep("FileDelete", "File", false, 0) {} ~CWorkStepFileDelete(void) {} //--- bool Init(const CYmlNode& parameters) override final; int Run() override final; }; //--- WORKFLOWS_FACTORY_DEFINE_CREATOR(CWorkStepFileDelete, FileFileDelete, "FileDelete", "File") //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CWorkStepFileDelete::Init(const CYmlNode ¶meters) { //--- m_common_flag = m_wf.TranslateBool(parameters["common_flag"], "false") ? FILE_COMMON : 0; m_file_name = m_wf.TranslateStr(parameters["file_name"], ""); return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CWorkStepFileDelete::Run(void) { ::ResetLastError(); if(!FileDelete(m_file_name, m_common_flag)) { LogError(StringFormat("Fallo al eliminar el archivo %s, ultimo err = %d", m_file_name, ::GetLastError()), FUNCION_ACTUAL); return ::GetLastError() == 0 ? 1 : (::GetLastError()); } return 0; } #endif // WORKFLOWSBYLEO_STEPS_FILE_MQH //+------------------------------------------------------------------+