我正在使用Ubuntu 14并尝试创建一个脚本来编写文件,但每次尝试打开文件时,我都会收到 5004
错误。
datetime currtime;
bool newcandle;
string terminal_data_path = TerminalInfoString( TERMINAL_DATA_PATH );
string filename = terminal_data_path + "\\MQL4\\Files\\" + "data.csv";
int filehandle;
filehandle = FileOpen( filename, FILE_WRITE | FILE_CSV );
if ( filehandle < 0 ){
Print( "Failed to open the file by the absolute path " );
Print( "Error code ", GetLastError() );
}
else {
Print( "file opened with sucess" );
}
如何在Ubuntu上解决这个问题?
更新
我尝试将文件更改为以下内容:
string terminal_data_path = TerminalInfoString( TERMINAL_DATA_PATH );
string filename = terminal_data_path + "\\tester\\files\\data.csv";
只是为了这个
string filename = "\\tester\\files\\data.csv";
并为此
string filename = "\\files\\data.csv";
但我仍然收到错误,但这次 5002
而不是5004
。
答案 0 :(得分:2)
有三个目录(包含子目录)可以放置工作文件:
/HISTORY/<current broker>
- 尤其是FileOpenHistory()
函数;
/EXPERTS/FILES
- 常见情况;
/TESTER/FILES
- 尤其适用于测试(在策略测试程序操作期间参考)。
禁止使用其他目录中的文件。
调整您的MQL4代码以满足这一事实并尊重Build 762之前和Build 762之后的差异(“新”-MQL4文件本地化)。
发布后,您的MQL4代码(无论您是否共享更新状态)都应更好地处理异常。用文件名遇到了几个令人惊讶的文物。特定于某些平台,在wXP中没有任何损害,但在VPS托管的wServer2008 VM或LinuxVM封装的Wine / MT4实例上无法运行(相同的代码)。
仔细阅读MQL4帮助文档,并创建一些事后验证工具,以便更进一步。
5002
ERR_FILE_WRONG_FILENAME
Wrong file name -------> pre-test + "fuse" the corner cases
5003
ERR_FILE_TOO_LONG_FILENAME
Too long file name
5004 <------ a good sign, we are on the safer side here
ERR_FILE_CANNOT_OPEN
Cannot open file
//-------------------------------------------------------------
// MT4_GUI_postMortem
//-------------------------------------------------------------
void MT4_GUI_postMortem( string aFileNAME = "caller forgot to pass aFileNAME"
){
// SYNTAX
// if ( aFileHANDLE == INVALID_HANDLE ) MT4_GUI_postMortem( filename );
//
int aLastErrorNUM = GetLastError();
Comment( "POST-MORTEM >>> [", aFileNAME, "] Threw error ", aLastErrorNUM );
Print( "POST-MORTEM >>> [", aFileNAME, "] Threw error ", aLastErrorNUM );
return;
}