I have a problem with the expected string len to be read by FileReadString:
Expected string length (int len returns 7512)
then
but StringLen(page) = 7167 (or sometime 4095 randomly) instead of 7512 !
any idea?
ps: I cannot/don't want to use FILE_READ|FILE_CSV as I've mixed binary
if(h < 1) ??
whats the FileSize(h) ?
I'm gonna test this.
when I create a string zz ="....... over 4k characters".... the editor crash.
So 'Ill try with a stringconcatenate and a loop...
thanks for help
whats the FileSize(h) ?
FileSize == 7516 (int len 4+ string 7512)
finally I'm not sure this is necessary to test because when I write the string of 7512 bytes to the file with FileWriteString it works.
only the read failed. that's strange
int len = FileReadInteger(h, LONG_VALUE); for(int z=0;z<len;z++) page = page+" "; Alert("===>"+StringLen(page));
page is well 7512, so I think it is possible to have over 4k string.
Maybe there is a limitation for FileReadString ? (it reads only 7167 bytes.)
page is well 7512, so I think it is possible to have over 4k string.
Maybe there is a limitation for FileReadString ? (it reads only 7167 bytes.)
Perhaps you have 0x00 in the string to be read. The MQL string is always truncated if this value appears.
Ok I found the problem. FileReadString is/seems to be limited to read APPROXIMATIVELY packet of 4096 bytes.
It should be good to mention this into the documentation of FileReadString, here a nasty but working fix for those interested:
string page = ""; int h = FileOpen(cfgFilename, FILE_READ|FILE_BIN); if(h < 1) { Alert("[ERROR] "+Symbol()+" Cannot read file: "+cfgFilename); } else { // Header page = ""; int len = FileReadInteger(h, LONG_VALUE); int toRead = len; int packet = 4000; // I know 4k = 4096 but I took a little margin because sometimes it reads 4095 max... while(toRead != 0) { if(FileIsEnding(h)) break; string buf = FileReadString(h, packet); /* int err=GetLastError(); if(err != 0) Alert("[ERROR] "+err+": "+ErrorDescription(err)); */ page = page+buf; toRead -= packet; if(toRead < packet) packet = toRead; } FileClose(h); if(StringLen(page) != len) Alert("[ERROR] "+Symbol()+" Ctrl Config: page length = "+StringLen(page)+" expected: "+len+", 10 first chars: "+StringSubstr(page, 0, 10)); }
FYI, the problem affects MT5.
This is especially annoying because the thing has been working without limitation in MT4 in my case. So for me it's strange that it's reported in MT4 section.
FYI, the problem affects MT5.
This is especially annoying because the thing has been working without limitation in MT4 in my case. So for me it's strange that it's reported in MT4 section.

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I have a problem with the expected string len to be read by FileReadString:
Expected string length (int len returns 7512)
then
page = FileReadString(h, len);
but StringLen(page) = 7167 (or sometime 4095 randomly) instead of 7512 !
any idea?
ps: I cannot/don't want to use FILE_READ|FILE_CSV as I've mixed binary