以下代码找不到文件并返回错误5002,文件名错误。
我还包含一个文件浏览器图片,显示该文件已存在。
你能帮我解释一下找不到文件的原因吗?
if (FileIsExist(TerminalInfoString(TERMINAL_DATA_PATH) + "\\templates\\reitron_trend_trading.tpl"))
ChartApplyTemplate(0,TerminalInfoString(TERMINAL_DATA_PATH) + "\\templates\\reitron_trend_trading.tpl");
else
{
int iErr = GetLastError();
string sErrDesc = ErrorDescription(iErr);
Print("Cannot open file - err " + IntegerToString(iErr) + " " + sErrDesc);
Print(TerminalInfoString(TERMINAL_DATA_PATH));
Print(TerminalInfoString(TERMINAL_DATA_PATH) + "\\templates\\reitron_trend_trading.tpl");
}
我终端的输出说明如下:
2018.03.07 15:59:30.628当我输出我在程序中搜索的路径时,Reitron_Scalping_Working_Model_2 EURUSD,M1:C:\ Users \ Jean \ AppData \ Roaming \ MetaQuotes \ Terminal \ BB190E062770E27C3E79391AB0D1A117 \ templates \ reitron_trend_trading.tpl
谢谢,
答案 0 :(得分:1)
Panta Rhei,MQL4
仍然在发展,所以要为未来的潜在变化做好准备
在最近的Build之前,所有MQL4指示的FileIO操作始终仅在受保护的目录位置内进行沙箱化,相对于此位置生根:
<~TerminalDIRECTORY~>/MQL4/Files
,绝不会。
如果代码是从StrategyTester工具运行的,则FileIO会以类似的方式运行到另一个位置: <~TerminalDIRECTORY~>/tester/Files
,绝不会。
简单地说,任何尝试在所述沙箱的“外部”执行任何FileIO操作都不会被执行以隔离潜在的安全原因。
所以,请将目标文件放在所述沙箱中的“内部”位置,这对MQL4-fileIO服务来说是可见的。那很简单。
<~TerminalDIRECTORY~>/MQL4/Files/aNewSubDirForApp/20180307/anythingElse/
对于文件名的绝对路径部分是可以的,代码将表示与snadbox相关的路径规范,如:
int aFileHANDLE = FileOpen( "aNewSubDirForApp/20180307/anythingElse/"
+ aFileNAME,
FILE_READ
);`
到目前为止(2017-EoY)没有例外。
然而,MQL4
仍然在发展,所以要为将来的潜在变化做好准备。