Русский

Справочник MQL4 Файловые операции FolderClean

Справка MQL4 одним файлом:

FolderClean

Удаляет все файлы в указанной папке.

bool  FolderClean(
   string  folder_name,       // строка с именем папки
   int     common_flag=0      // область действия
   );

Параметры

folder_name

[in]  Имя директории, в которой требуется удалить все файлы. Содержит полный путь к папке.

common_flag=0

[in] Флаг, определяющий местоположение директории. Если common_flag=FILE_COMMON, то директория находится в общей папке всех клиентских терминалов \Terminal\Common\Files. В противном случае директория находится в локальной папке (MQL4\Files или MQL4\Tester\Files в случае тестирования).

Возвращаемое значение

Возвращает true в случае успеха, иначе false.

Примечание

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

Осторожно пользуйтесь этой функцией, так как все файлы и все вложенные поддиректории удаляются безвозвратно.

Пример:

//+------------------------------------------------------------------+
//|                                             Demo_FolderClean.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- описание
#property description "Скрипт показывает пример использования FolderClean()."
#property description "Сначала создаются файлы в указанной папке с помощью функции FileOpen()."
#property description "Затем перед удалением файлов выводится предупреждение MessageBox()."
 
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры
input string   foldername="demo_folder";  // создаем папку в MQL4/Files/
input int      files=5;                   // сколько файлов создадим и удалим
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string name="testfile";
//--- сначала откроем или создадим файлы в папке данных нашего терминала
   for(int N=0;N<files;N++)
     {
      //--- соберем имя файла в виде 'demo_folder\testfileN.txt'
      string filemane=StringFormat("%s\\%s%d.txt",foldername,name,N);
      //--- открываем файл с флагом на запись, в этом случае папка 'demo_folder' будет создана автоматически
      int handle=FileOpen(filemane,FILE_WRITE);
      //--- выясним, насколько успешно отработала функция FileOpen()
      if(handle==INVALID_HANDLE)
        {
         PrintFormat("Не удалось создать файл %s. Код ошибки ",filemane,GetLastError());
         ResetLastError();
        }
      else
        {
         PrintFormat("Файл %s успешно открыт",filemane);
         //--- открытый файл нам больше не нужен, обязательно закрываем
         FileClose(handle);
        }
     }
 
//--- проверим, сколько файлов в папке 
   int k=FilesInFolder(foldername+"\\*.*",0);
   PrintFormat("Всего в папке %s найдено %d файлов",foldername,k);
 
//--- выведем диалоговое окно и спросим пользователя
   int choice=MessageBox(StringFormat("Вы собираетесь удалить из папки %s %d файлов, продолжить?",foldername,k),
                         "Удаление файлов из папки",
                         MB_YESNO|MB_ICONQUESTION); //  будут две кнопки - "Yes" и "No"
   ResetLastError();
 
//--- выполним действия в зависимости от выбранного варианта
   if(choice==IDYES)
     {
      //--- начинаем удалять
      PrintFormat("Попытка удалить все файлы из папки %s",foldername);
      if(FolderClean(foldername,0))
         PrintFormat("Файлы успешно удалены, в папке %s осталось %d файлов",
                     foldername,
                     FilesInFolder(foldername+"\\*.*",0));
      else
         PrintFormat("Не удалось удалить файлы из папки %s. Код ошибки %d",foldername,GetLastError());
     }
   else
      PrintFormat("Удаление отменено");
//---
  }
//+------------------------------------------------------------------+
//| возвращает количество файлов в указанной папке                   |
//+------------------------------------------------------------------+
int FilesInFolder(string path,int flag)
  {
   int count=0;
   long handle;
   string filename;
//---
   handle=FileFindFirst(path,filename,flag);
//--- если хотя бы один файл найден, ищем остальные
   if(handle!=INVALID_HANDLE)
     {
      //--- выведем имя файла
      PrintFormat("найден файл %s",filename);
      //--- увеличим счетчик найденный файлов/папок
      count++;
      //--- начинаем перебор всех файлов/папок 
      while(FileFindNext(handle,filename))
        {
         PrintFormat("найден файл %s",filename);
         count++;
        }
      //--- обязательно закрываем хендл поиска по окончании
      FileFindClose(handle);
     }
   else // хендл получить не удалось
     {
      PrintFormat("Не удалось провести поиск файлов в папке %s",path);
     }
//--- вернем результат
   return count;
  }

Смотри также

FileFindFirst(), FileFindNext(), FileFindClose()