FileOpen - файлови операции - референтни MQL4 - документация MQL4

[В] Име на файла, който може да съдържа подпапки. Ако файлът е отворен за писане, а след това ще бъдат създадени тези подпапки в тяхно отсъствие.

[В] комбинация от флагове. определя начина на работа с файла. Знамената са определени, както следва:
FILE_READ се отвори файл за четене
FILE_WRITE се отвори файл за писане
FILE_BIN двоичен режим за четене и запис (без преобразуване на низ и поредица)
FILE_CSV тип файл CSV (всички записани елементи са превърнати до съответните низове тип, уникод или ANSI, и разделени от сепаратор)
FILE_TXT обикновен текстов файл (същият CSV, но сепаратора не се взема под внимание)
FILE_ANSI тип линия ANSI (еднобайтови знаци)
FILE_UNICODE тип линия UNICODE (двойна байтови символи)
FILE_SHARE_READ сподели четене от няколко програми
споделяне FILE_SHARE_WRITE на записи от няколко програми
FILE_COMMON местоположението на даден файл в споделена папка на всички терминали \ Terminal \ Common \ Files

[В] стойност се използва като сепаратор в TXT или CSV файл. Ако не е посочен разделител на CSV файл, по подразбиране ";". Ако не е посочен сепаратора, без разделител се използва за TXT файлове. Ако сепаратора е ясно трябва да е 0, а след това не се използва сепаратор.

[В] По избор. Стойността на страницата код. За най-често използваните кодови страници са предвидени съответните константи.

При успех, функцията връща дръжката за отваряне на файл, който след това се използва за достъп до данните на файловете. В случай на неуспех връща INVALID_HANDLE.

От съображения за безопасност, в MQL4 е строго контролирана работа с файлове. Файловете, които подават операции се извършват с помощта на MQL4, не може да бъде извън "пясък" файла.

Файлът се отваря в папката на клиентския терминал в подпапка MQL4 \ Files (или тестер \ файлове в случай на проверка). Ако сред флаговете FILE_COMMON, а след това се отваря файла в споделена папка на всички терминали \ Terminal \ Common \ Files.

Можете да отворите "именувани канали" от следните правила:

  • Име на канала - низ, който трябва да бъде във вида: "\\ именасървър \ тръба \ pipename", където именасървър - име на сървър в мрежата, както и pipename - името на канала. Ако каналите се използват на един и същ компютър, името на сървъра може да се пропусне, но вместо това е необходимо да се постави точка: ". \\ \ тръба \ pipename". Всеки клиент, който се опитва да се свърже с канала трябва да знае името му.
  • Необходимо е да се предизвика FileFlush () и FileSeek () в началото на файла между две последователни операции за четене от канала и записване на канала.

В тези редове, специален наклонена черта "\", така, когато пишете името в програмата MQL4 "\" трябва да е двойно, т.е. в примера по-горе, за да пишете код, като "\\\\ именасървър \\ \\ тръба pipename".

За повече информация относно работата с посочените тръби можете да прочетете в статията "съобщението с MetaTrader 5 чрез именувани канали без използването на DLL"

// + ----------------------------------------------- ------------------- +
// | Script програма старт функция |
// + ----------------------------------------------- ------------------- +
анулира OnStart ()
<
// --- грешен начин за отваряне на файл
низ terminal_data_path = TerminalInfoString (TERMINAL_DATA_PATH);
низ име = terminal_data_path + "\\ \\ MQL4 Files" + "fractals.csv";
вътр filehandle = FileOpen (името на файла, FILE_WRITE | FILE_CSV);
ако (filehandle<0)
<
Print ( "Опитът да отворите чрез абсолютен път");
Print ( "Error Code" GetLastError ().);
>
// --- правилният начин за работа в "файл пясъчника"
ResetLastError ();
filehandle = FileOpen ( "fractals.csv" FILE_WRITE | FILE_CSV.);
ако (filehandle! = INVALID_HANDLE)
<
FileWrite (filehandle, TimeCurrent (), символ (), EnumToString (ENUM_TIMEFRAMES (_Period)));
FileClose (filehandle);
Print ( "FileOpen OK");
>
останало Print ( "операция FileOpen провали, грешка" GetLastError ().);
// --- друг пример със създаването на вложени директории в MQL4 \ Files \
низ подпапка = "изследвания";
filehandle = FileOpen (подпапка + "\\ fractals.txt" FILE_WRITE | FILE_CSV.);
ако (filehandle! = INVALID_HANDLE)
<
FileWrite (filehandle, TimeCurrent (), символ (), EnumToString (ENUM_TIMEFRAMES (_Period)));
FileClose (filehandle);
Print ( "Файлът трябва да бъде създаден в папката" + terminal_data_path + "" + подпапка);
>
останало Print ( "операция FileOpen провали, грешка" GetLastError ().);
>