MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
//+------------------------------------------------------------------+ //| 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//--- входные параметры inputstring firstFolder="empty"; // пустая папка inputstring secondFolder="nonempty";// папка, в которой будет один файл string FolderName="delete_me Folder"; // имя файла, который мы создадим в папке secondFolder string filename="delete_me.txt"; // имя файла, который мы создадим в папке secondFolder //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart()
{
//--- хендл файла запишем сюда 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();
}
elsePrintFormat("Не удалось создать папку %s. Код ошибки %d",working_folder+"\\"+firstFolder, GetLastError());
//--- теперь создадим пустую папку с помощью функции FolderCreatestring filepath=secondFolder+"\\"+FolderName; // сформируем путь для файла, который хотим открыть на запись в несуществующей папке if(FolderCreate(filepath))
{
FolderCreate(filepath + "1");
PrintFormat("Открыли папку %s",working_folder+"\\"+filepath);
}
elsePrintFormat("Не удалось создать папку %s в папке %s. Код ошибки=",FolderName,secondFolder, GetLastError());
/**///--- теперь создадим файл с помощью функции FileOpen() string filepath_2=secondFolder+"\\"+filename; // сформируем путь для файла, который хотим открыть на запись в несуществующей папке
handle=FileOpen(filepath_2,FILE_WRITE|FILE_TXT); // флаг FILE_WRITE в данном случае обязателен, см. справку к функции FileOpen if(handle!=INVALID_HANDLE)
{
//************************************************************************* //---- Явно закрываем файл. FileClose(handle);
//************************************************************************* PrintFormat("Открыли файл на чтение %s",working_folder+"\\"+filepath_2);
}
elsePrintFormat("Не удалось создать файл %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);
elsePrintFormat("Не удалось удалить папку %s. Код ошибки=%d", firstFolder, GetLastError());
ResetLastError();
//*********************************************************************************************************************** //--- сначала очищаем папкуif(FolderClean(secondFolder))
PrintFormat("Папка %s успешно очищена", secondFolder);
else//--- PrintFormat("Не удалось очистить папку %s. Код ошибки=%d", secondFolder, GetLastError());
//*********************************************************************************************************************** ResetLastError();
//--- удаляем папку, которая содержит файл if(FolderDelete(secondFolder))
PrintFormat("Папка %s успешно удалена", secondFolder);
else//--- PrintFormat("Не удалось удалить папку %s. Код ошибки=%d", secondFolder, GetLastError());
}
elsePrint("Удаление отменено");
//---
}
我的意思是,你是否把脚本做成了EA,并尝试运行它?
问题是,不清楚这些标志与FolderClean()有什么关系。在我看来,根本不是。
我想证明,这根本不是关于文件的问题。我将重新编写脚本,使它创建一个 "DeleteMe.txt "文件夹,而不是 "notempty "文件夹,然后它删除这个文件夹,就像它之前试图对文件做的那样。让我们看看它是否有区别)。
问题是,不清楚这些标志与FolderClean()有什么关系。在我看来,根本没有。
如果一个文件夹中没有文件,或者可以被删除,则可以删除该文件夹。这些标志允许访问文件
我的意思是,你是否把脚本做成了EA,并尝试运行它?
我在哪里说过我做了一个EA?
我不得不说,确实,明确关闭文件是有效的。我想我错了。第一次没有成功,可能是因为我没有保存重新设计的脚本的新版本,明确的关闭没有生效。
现在我试着创建文件夹 而不是一个文件。它们的擦除没有任何问题。
然后再次添加了文件创建。结果:在没有明确关闭文件的情况下,该文件夹没有像以前那样被脚本删除。随着文件的明确关闭,它被完全删除。
当然,这种经验并不能解释一切,有些事情暂时还很模糊,但这个结果是鼓舞人心的。
我将继续测试,并将报告结果。
可能仍然有问题,现在很难说。
我哪里说了议员做了什么?
下面是创建 "DeleteMe.txt "和 "DeleteMe Folder "文件的脚本代码。 该文件在创建后立即明确关闭。
一切似乎都在运作...
当然,这种经验并不能解释一切,有些事情暂时还很模糊,但这个结果是鼓舞人心的。
我将继续测试,并将报告结果。
可能仍有问题,目前很难说。
是的,你当然可以,并保留细节,只是说 "我已经改变了帮助中的例子,一点都没有"。
我们会继续猜测--因为任何人都可以用日志来猜测。 而且这样做更有趣。
是的,当然,写。 和细节保持自己,只是说 "我已经改变了一个小例子的帮助,什么都没有。
我们会继续猜测--毕竟,有了日志,任何人都可以猜测,而且这样做更有趣。
很奇怪。这不是针对个人的。如果我是不专业的,我很抱歉。我将学习。
谢谢你的帮助。
P.S. 我只是从来没有在论坛上寻求过帮助。因此,没有经验。
我记得你在OOP与程序化编程 的主题中说 "我把所有的动作都写下来了" 。 在这个主题中,我只是相信你是不可信的。
没有证据,也没有细节--没有必要写信给servicedesk。