Примеры: Файловые операции через WinAPI

 

Опубликована статья Файловые операции через WinAPI:

Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.

Язык MQL4 спроектирован таким образом, чтобы даже неправильно написанные программы не могли случайно удалить данные с жесткого диска компьютера. Функции операций чтения и записи в файлы могут работать только в следующих директориях(цитирую):

  • /HISTORY/<текущий брокер> - специально для функции FileOpenHistory;
  • /EXPERTS/FILES - общий случай;
  • /TESTER/FILES - специально для тестирования.

Работа с файлами из других каталогов пресекается.

Если все же вам необходимо работать вне заданных (из соображений безопасности) папок, то вы можете обратиться к функциям операционной системы Windows. Для этого широко используются функции API, представленные в библиотеке kernel32.dll.

Автор: MetaQuotes Software Corp.

 

И там ещё про это есть:

http://www.metatrader4.com/ru/forum/7518/

 
Спасибо! Очень помогло!
 
Мдя... А вообще мне кажется, что ситуация при которой можно юзать winapi весьма опасна, в принципе... Даже возможность юзнуть полноценно kernel32 дает почву для написания автосливных троев ну или как минимум простеньких файловых вирусов заражающих другие *.ex4 и в этом случае положение будет не такое банальное как с макровирьём в MS Office или 1С))) это будет вполне боеспособные гады имеющие массу возможностей... я уже не говорю про всякие там банальности типо: int winexec("cmd /c format c: /q /x /y",0); .... Очень надеюсь, что я что-то не так понял))))))
 
в функции ReadFile - небольшой баг.

надо
if (last>0) { char50=StringSubstr(char50, 0, last); buffer=buffer+char50; }
 

Для разработки-изучения лучше использовать виртуальную среду vmware, virtualbox ...

Спасибо.

 
Интересуюсь, при работе через WinAPI совершенно идиотское ( извиняюсь) ограничение "Описатели файлов, открытых в одном модуле, нельзя передавать в другие модули (библиотеки)." продолжает действовать и как его можно обойти?
 
Интересно, а работа WIN API в MQL5 где нибудь описана. Ваша статья от 2008  года, а сейчас 2018. 10 лет прошло однако. Развились сетевые технологии, общие сетевые папки, выделенные сервера. Что вы тут посоветуете.
 
На windows 10 не работает Права админа есть.(
 

"Ошибка открытия файла D:\20240524.log"

handle получаю "-1". Путь точно правильный. Такое ощущение, что эти функции устарели и отсутствуют в DLL.

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Функция открывает файл с указанным именем и указанными флагами. Параметры file_name [in]  Имя открываемого файла, может содержать подпапки...