Warum schlägt die Funktion FolderClean() in diesem Skript fehl?
//+------------------------------------------------------------------+ //| 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(FolderClean(secondFolder)) PrintFormat("Папка %s успешно очищена", secondFolder); else //--- PrintFormat("Не удалось очистить папку %s. Код ошибки=%d", secondFolder, GetLastError()); //*********************************************************************************************************************** ResetLastError(); //--- удаляем папку, которая содержит файл if(FolderDelete(secondFolder)) PrintFormat("Папка %s успешно удалена", secondFolder); else //--- PrintFormat("Не удалось удалить папку %s. Код ошибки=%d", secondFolder, GetLastError()); } else Print("Удаление отменено"); //--- }
Der Versuch, einen Ordner zu bereinigen, führt zu Fehler 5026 - (Ordner kann nicht bereinigt werden).
Dieses Skript ist der Dokumentation (Abschnitt von FolderDelete()) entnommen und leicht verändert. Ein Ordner, der andere Unterordner oder Dateien enthält, muss geleert werden, um ihn vollständig zu entfernen. Zu diesem Zweck wird ein Aufruf von FolderClean() hinzugefügt.
Warum schlägt die Funktion FolderClean() in diesem Skript fehl?
Der Versuch, einen Ordner zu löschen, führt zu Fehler 5026 - (Ordner kann nicht gelöscht werden).
Dieses Skript ist der Dokumentation (Abschnitt der Funktion FolderDelete()) entnommen und leicht verändert. Um einen Ordner, der andere Unterordner oder Dateien enthält, vollständig zu löschen, sollten Sie ihn leeren. Zu diesem Zweck wird ein Aufruf von FolderClean() hinzugefügt.
Stört es Sie nicht, dass Sie versuchen, die Sandbox eines anderen zu betreten (in MQL4)?
Ist es nicht verwirrend, dass Sie versuchen, in den Sandkasten eines anderen zu gelangen (in MQL4)?
Ich kann Sie nicht ganz verstehen. Was meinen Sie damit? Das Experiment wurde mit MT4 durchgeführt.
Hinweis
Aus Sicherheitsgründen kontrolliert die Sprache MQL5 Operationen mit Dateien streng. Die Dateien, die mit der MQL5-Sprache bearbeitet werden, können sich nicht außerhalb der Datei-Sandbox" befinden.
Eine Datei wird im Client-Terminal-Ordner im Unterordner MQL5\Files (oder im Agent-Testing-Verzeichnis\MQL5\Files im Falle von Tests) geöffnet. Wenn unter den Flags FILE_COMMON angegeben ist, wird die Datei im gemeinsamen Ordner aller Client-Terminals \Terminal\Common\Files geöffnet.
Hinweis
Aus Sicherheitsgründen kontrolliert die Sprache MQL5 Operationen mit Dateien streng. Die Dateien, die mit der MQL5-Sprache bearbeitet werden, können sich nicht außerhalb der Datei-Sandbox" befinden.
Eine Datei wird im Client-Terminal-Ordner im Unterordner MQL5\Files (oder im Agent-Testing-Verzeichnis\MQL5\Files im Falle von Tests) geöffnet. Wenn unter den Flags FILE_COMMON angegeben ist, wird die Datei im gemeinsamen Ordner aller Client-Terminals \Terminal\Common\Files geöffnet.
Dieses Skript ist der Dokumentation entnommen.
Hier ist der Weg, auf dem die Ordner erstellt werden:
string working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files";
Ein Teil der Funktion FolderDelete() funktioniert und löscht den Ordner, der leer ist. Die Funktion FolderDelete() funktioniert jedoch nicht mehr bei einem Ordner mit einer Datei, da sich innerhalb des Ordners eine Datei befindet, die zuerst gelöscht werden muss. Um sie zu löschen, habe ich einen Aufruf von FolderClean() gemäß den Anweisungen hinzugefügt. Die Funktion FolderClean() schlägt jedoch aus irgendeinem Grund fehl und der Ordner mit der Datei wird nicht gelöscht. Folglich wird er nicht durch FolderDelete() gelöscht.
Hinweis
Aus Sicherheitsgründen kontrolliert die Sprache MQL5 Operationen mit Dateien streng. Die Dateien, die mit der MQL5-Sprache bearbeitet werden, können sich nicht außerhalb der Datei-Sandbox" befinden.
Eine Datei wird im Client-Terminal-Ordner im Unterordner MQL5\Files (oder im Agent-Testing-Verzeichnis\MQL5\Files im Falle von Tests) geöffnet. Wenn unter den Flags FILE_COMMON angegeben ist, wird die Datei im gemeinsamen Ordner aller Client-Terminals \Terminal\Common\Files geöffnet.
Es macht keinen Unterschied, ob der Code MQL4 oder MQL5 ist. Der Code dieses Skripts funktioniert auf beiden Plattformen gleichermaßen. Ich habe es auf MT4 getestet.
Haben Sie den MQL5-Code in dem alten Terminal ausgeführt? Lassen Sie mich nachsehen ...
Haben Sie den MQL5-Code in dem alten Terminal ausgeführt? Lassen Sie mich nachsehen ...
Glauben Sie mir, damit gibt es kein Problem.
Was ich beweisen musste: Das alte Terminal sieht keine MQL5-Programme. Sie versuchen, die Datei-Sandbox einer anderen Person in einem MQL5-Skript zu öffnen.
Реter Konow:
Die Funktion FolderClean() schlägt jedoch aus irgendeinem Grund fehl, und der Ordner mit der Datei wird nicht geleert. Folglich wird er nicht durch FolderDelete() gelöscht.
Aus irgendeinem Grund lässt mich das Betriebssystem die Datei nicht löschen - vielleicht ist sie von einem anderen Programm geöffnet oder es hat keine Zugriffsrechte.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.