Подскажите пожалуйста простое решение?
Запустить терминал с ключем portable, а файл поместить в папку ...\MetaTrader 4\MQL4\Files
И не нужны ни какие библиотеки.
Запустить терминал с ключем portable, а файл поместить в папку ...\MetaTrader 4\MQL4\Files
И не нужны ни какие библиотеки.
Мне это нужно для непрерывного обмена данными между самописным приложением и МТ4. Прога пишет в любую другую папку а в терминальную нет. Если быть точнее, секунд через 5-10 вылетает ошибка и запись прекращается.
Сейчас пробую такой вариант:
#define OF_EXIST 0x00004000 // Открывает файл затем закрывает это. Используйте это, чтобы тестироваться для существования файла. #import "kernel32.dll" int OpenFile(string lpFileName,int lpReOpenBuff,int wStyle); #import //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int h=0; h=OpenFile("C:\\log.txt",0,OF_EXIST); Print("Handle: ",h); }
Но выдает ошибку: 2015.09.05 06:56:19.558 Access violation read to 0x00000000 in 'kernel32.dll'
Погуглите "link shell extension". На этом форуме так же давались описания, поищите.
По большому счету создаете папку где угодно на диске (например в C:\XYZ), а затем - жесткий(е) линк(и) к ней из любой другой папки (например из папки 'Files' MT4). После этого любой файл помещенный в эту папку будет доступен как в оригинальной папке, так и в ее линках, как если бы это была оригинальная папка.
Мне это нужно для непрерывного обмена данными между самописным приложением и МТ4. Прога пишет в любую другую папку а в терминальную нет. Если быть точнее, секунд через 5-10 вылетает ошибка и запись прекращается.
Сейчас пробую такой вариант:
Но выдает ошибку: 2015.09.05 06:56:19.558 Access violation read to 0x00000000 in 'kernel32.dll'
Второй аргумент функции OpenFile не может быть нулём.
Нужно делать так:
#define OF_EXIST 0x00004000 #define OFS_MAXPATHNAME 128 struct OFSTRUCT { uchar cBytes; uchar fFixedDisk; ushort nErrCode; ushort Reserved1; ushort Reserved2; uchar szPathName[OFS_MAXPATHNAME]; }; #import "kernel32.dll" int OpenFile( string lpFileName, OFSTRUCT& lpReOpenBuff, int wStyle ); #import void OnStart() { int h = 0; OFSTRUCT ofstruct; h = OpenFile( "C:\\log.txt", ofstruct, OF_EXIST ); Print( "Handle: ", h ); }
Подскажите пожалуйста простое решение?
Создайте символическую ссылку на log.txt в "песочнице" терминала и всё будет работать.
Поясните, пожалуйста, как создать символическую ссылку на файл в "песочнице" терминала
Вы погуглили "link shell extension"? После инсталляции ...
Инсталлировать все подряд отучился еще 50 лет назад.
Для одного файла ссылка создается так:
mklink "X:\ПапкаТерминала\MQL4\Files\A.txt" "Y:\Фильмы\A.txt"и в папке ...MQL4\Files\ появился файл A.txt
Для папки команда с ключом /D:
mklink /D "X:\ПапкаТерминала\MQL4\Files\BIRD\" "Y:\ICO\"
и в папке ...MQL4\Files\ появилась папка BIRD, а в ней - все содержимое папки Y:\ICO\
Подробнее: http://tigors.net/windows-on-ssd-tweaks/ и http://kaktusenok.blogspot.ru/2012/05/hardlink-windows-7.html- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите пожалуйста простое решение?
Пробовал функции ReadFile.
Функция хорошо бы подошла, но что в ней исправить чтобы работала?
Не работает.
Смотрел библиотеку: https://www.mql5.com/ru/code/8577
Громоздко, не разобрался.