Perché la funzione FolderClean() in questo script fallisce?
//+------------------------------------------------------------------+ //| 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("Удаление отменено"); //--- }
Un tentativo di pulire una cartella dà come risultato l'errore 5026 - (la cartella non può essere pulita).
Questo script è preso dalla documentazione (sezione di FolderDelete()) e leggermente modificato. Una cartella che contiene altre sottocartelle o file deve essere cancellata per rimuoverla completamente. Viene aggiunta una chiamata a FolderClean() per questo scopo.
Perché la funzione FolderClean() in questo script fallisce?
Un tentativo di cancellare una cartella dà come risultato l'errore 5026 - (la cartella non può essere cancellata).
Questo script è preso dalla documentazione (sezione della funzione FolderDelete()) e leggermente modificato. Per eliminare completamente una cartella che contiene altre sottocartelle o file, è necessario cancellarla. Viene aggiunta una chiamata a FolderClean() per questo scopo.
Non vi dà fastidio che state cercando di entrare nella sandbox di qualcun altro (in MQL4)?
Non ti confonde il fatto che stai cercando di entrare nella sandbox di qualcun altro (in MQL4)?
Non ti capisco bene. Cosa vuoi dire con questo. L'esperimento è stato fatto su MT4.
Nota
Per ragioni di sicurezza, il linguaggio MQL5 controlla strettamente le operazioni con i file. I file che sono gestiti utilizzando il linguaggio MQL5 non possono essere al di fuori della "sandbox" dei file.
Un file viene aperto nella cartella del terminale del cliente nella sottocartella MQL5\Files (o nella directory_agent_testing_MQL5\Files in caso di test). Se FILE_COMMON è specificato tra i flag, il file sarà aperto nella cartella comune di tutti i terminali client \Terminal\Common\Files.
Nota
Per ragioni di sicurezza, il linguaggio MQL5 controlla strettamente le operazioni con i file. I file che vengono gestiti utilizzando il linguaggio MQL5 non possono essere al di fuori della "sandbox" dei file.
Un file viene aperto nella cartella del terminale del cliente nella sottocartella MQL5\Files (o nella directory_agent_testing_MQL5\Files in caso di test). Se FILE_COMMON è specificato tra i flag, il file viene aperto nella cartella comune di tutti i terminali client \Terminal\Common\Files.
Questo script è preso dalla documentazione.
Ecco la traccia in cui vengono create le cartelle:
string working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files";
Parte della funzione FolderDelete() funziona e cancella la cartella che è vuota. Tuttavia, la funzione FolderDelete() non funziona più su una cartella con un file perché c'è un file all'interno della cartella che deve essere prima cancellato. Per cancellarlo, ho aggiunto una chiamata a FolderClean() come da istruzioni. Tuttavia, la funzione FolderClean() fallisce per qualche motivo e la cartella con il file non viene cancellata. Di conseguenza, non viene cancellato da FolderDelete().
Nota
Per ragioni di sicurezza, il linguaggio MQL5 controlla strettamente le operazioni con i file. I file che sono gestiti utilizzando il linguaggio MQL5 non possono essere al di fuori della "sandbox" dei file.
Un file viene aperto nella cartella del terminale del cliente nella sottocartella MQL5\Files (o nella directory_agent_testing_MQL5\Files in caso di test). Se FILE_COMMON è specificato tra i flag, il file si apre nella cartella comune di tutti i terminali client \Terminal\Common\Files.
Non c'è differenza se il codice è MQL4 o MQL5. Il codice di questo script funziona ugualmente su entrambe le piattaforme. L'ho testato su MT4.
Hai eseguito il codice MQL5 nel vecchio terminale? Lasciami controllare ...
Hai eseguito il codice MQL5 nel vecchio terminale? Lasciami controllare ...
Credetemi, non c'è nessun problema.
Quello che ho dovuto provare: il vecchio terminale NON VEDE i programmi MQL5. Stai cercando di aprire il file sandbox di qualcun altro in uno script MQL5.
Реter Konow:
Tuttavia, la funzione FolderClean() fallisce per qualche motivo e la cartella con il file non viene cancellata. Di conseguenza, non viene cancellato da FolderDelete().
Per qualche ragione, il sistema operativo non mi permette di cancellare il file - potrebbe essere aperto da un altro programma o potrebbe non avere diritti di accesso.
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso