Библиотеки: CDir (MT5) - класс для получения оглавления каталога

 

CDir (MT5) - класс для получения оглавления каталога:

Класс CDir предназначен для получения сведений о файлах и папках вне "песочницы" MQL5 подобно команде MS-DOS Dir. Задействован вызов системных DLL, поэтому следует разрешить их использование.

Иногда возникает необходимость выйти за пределы "песочницы" и прочитать оглавление, проверить наличие файла или каталога в файловой системе. Также может потребоваться узнать атрибуты файла или директории, размер файла, время его создания, последнего доступа к нему или записи. Пример возможного решения таких задач представлен этим кодом:

Стандартный пролог и описание переменных, а также ссылка на исходный код включаемого класса #include <WIN_API\Dir_API.mqh> - явное указание компилятору, что ему следует искать этот файл в директории \MQL5\Include\WIN_API. Вы вольны изменить эту ссылку в зависимости от ваших предпочтений в организации работы с включаемыми файлами руководствуясь документацией.

//+------------------------------------------------------------------+
//|                                            ExampleDirClass.mq4/5 |
//|                                        Copyright © 2017, Avatara |
//|                            https://www.mql5.com/en/users/avatara |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Avatara"            2017/02/12
#property link      "https://www.mql5.com/en/users/avatara"
#property description "-- Example Dir Class --------------"
#property strict
#include <WIN_API\Dir_API.mqh> 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   File_Def File;            // work structure
   CDir Dir; int total,i;     
   string path = TerminalInfoString(TERMINAL_COMMONDATA_PATH)+
               "\\..\\..\\Terminal";
//---    
  

Как мы видим, строковая переменная path содержит путь к папке, находящейся на два уровня выше стандартного расположения каталога запущенного терминала, и мы (в случае если не использовалась опция /portable) получим путь к каталогу, содержащего пользовательские данные всех клиентских терминалов этого пользователя.

Вдумчивый читатель скажет, что мы делаем лишние телодвижения - достаточно подняться на один уровень и мы будем в нужном каталоге. Да, но а если мы захотим осуществить навигацию к другому каталогу - например: Crashes или Tester? Для нашего примера, это поучительней.


Автор: Mikhail Dovbakh