Русский

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

FolderDelete

Удаляет указанную директорию. Если папка не пуста, то она не может быть удалена.

bool  FolderDelete(
   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, не могут находиться за пределами файловой "песочницы".

Если директория содержит хоть один файл и/или поддиректорию, то удаление такой директории невозможно, ее необходимо предварительно очистить. Тотальная очистка папки от всех файлов и всех вложенных подпапок осуществляется при помощи функции FolderClean().

Пример:

//+------------------------------------------------------------------+
//|                                            Demo_FolderDelete.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 "Скрипт показывает пример использования FolderDelete()."
#property description "Сначала создаются две папки, одна пустая, другая содержит файл."
#property description "При попытке удаления непустой папки получим ошибку и предупреждение."
 
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры
input string   firstFolder="empty";    // пустая папка
input string   secondFolder="nonempty";// папка, в которой будет один файл
string filename="delete_me.txt";       // имя файла, который мы создадим в папке secondFolder
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- хендл файла запишем сюда
   int handle;
//--- выясним в какой папке мы работаем
   string working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files";
//--- отладочное сообщение   
   PrintFormat("working_folder=%s",working_folder);
//--- попытка создать пустую папку относительно пути MQL4\Files
   if(FolderCreate(firstFolder,0)) // 0 означает, что работаем в локальной папке терминала
     {
      //--- выведем полный путь до созданной папки
      PrintFormat("Cоздали папку %s",working_folder+"\\"+firstFolder);
      //--- сбросим код ошибки
      ResetLastError();
     }
   else
      PrintFormat("Не удалось создать папку %s. Код ошибки %d",working_folder+"\\"+firstFolderGetLastError());
 
//--- теперь создадим непустую папку с помощью функции FileOpen()
   string filepath=secondFolder+"\\"+filename;  // сформируем путь для файла, который хотим открыть на запись в несуществующей папке
   handle=FileOpen(filepath,FILE_WRITE|FILE_TXT); // флаг FILE_WRITE в данном случае обязателен, см. справку к функции FileOpen
   if(handle!=INVALID_HANDLE)
      PrintFormat("Открыли файл на чтение %s",working_folder+"\\"+filepath);
   else
      PrintFormat("Не удалось создать файл %s в папке %s. Код ошибки=",filename,secondFolderGetLastError());
 
   Comment(StringFormat("Готовимся удалить папки %s и %s"firstFoldersecondFolder));
//--- Небольшая пауза в 5 секунд, чтобы мы могли прочитать сообщение на графике
   Sleep(5000); // Sleep() нельзя использовать в индикаторах!
 
//--- выведем диалоговое окно и просим пользователя
   int choice=MessageBox(StringFormat("Удалить папки %s и %s?"firstFoldersecondFolder),
                         "Удаление папок",
                         MB_YESNO|MB_ICONQUESTION); //  будут две кнопки - "Yes" и "No"
 
//--- выполним действия в зависимости от выбранного варианта
   if(choice==IDYES)
     {
      //--- очистим комментарий на графике
      Comment("");
      //--- выведем сообщение в журнал "Эксперты"
      PrintFormat("Пробуем удалить папки %s и %s",firstFoldersecondFolder);
      ResetLastError();
      //--- удаляем пустую папку
      if(FolderDelete(firstFolder))
         //--- должны увидеть это сообщение, так как папка пустая
         PrintFormat("Папка %s успешно удалена",firstFolder);
      else
         PrintFormat("Не удалось удалить папку %s. Код ошибки=%d"firstFolderGetLastError());
 
      ResetLastError();
      //--- удаляем папку, которая содержит файл 
      if(FolderDelete(secondFolder))
         PrintFormat("Папка %s успешно удалена"secondFolder);
      else
         //--- должны увидеть это сообщение, так как в папке есть файл
         PrintFormat("Не удалось удалить папку %s. Код ошибки=%d"secondFolderGetLastError());
     }
   else
      Print("Удаление отменено");
//---
  }

Смотри также

FileOpen(), FolderClean(), FileMove()