//+------------------------------------------------------------------+
//| 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+"\\"+firstFolder, GetLastError());
//--- теперь создадим непустую папку с помощью функции 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,secondFolder, GetLastError());
Comment(StringFormat("Готовимся удалить папки %s и %s", firstFolder, secondFolder));
//--- Небольшая пауза в 5 секунд, чтобы мы могли прочитать сообщение на графике
Sleep(5000); // Sleep() нельзя использовать в индикаторах!
//--- выведем диалоговое окно и просим пользователя
int choice=MessageBox(StringFormat("Удалить папки %s и %s?", firstFolder, secondFolder),
"Удаление папок",
MB_YESNO|MB_ICONQUESTION); // будут две кнопки - "Yes" и "No"
//--- выполним действия в зависимости от выбранного варианта
if(choice==IDYES)
{
//--- очистим комментарий на графике
Comment("");
//--- выведем сообщение в журнал "Эксперты"
PrintFormat("Пробуем удалить папки %s и %s",firstFolder, secondFolder);
ResetLastError();
//--- удаляем пустую папку
if(FolderDelete(firstFolder))
//--- должны увидеть это сообщение, так как папка пустая
PrintFormat("Папка %s успешно удалена",firstFolder);
else
PrintFormat("Не удалось удалить папку %s. Код ошибки=%d", firstFolder, GetLastError());
ResetLastError();
//--- удаляем папку, которая содержит файл
if(FolderDelete(secondFolder))
PrintFormat("Папка %s успешно удалена", secondFolder);
else
//--- должны увидеть это сообщение, так как в папке есть файл
PrintFormat("Не удалось удалить папку %s. Код ошибки=%d", secondFolder, GetLastError());
}
else
Print("Удаление отменено");
//---
} |