이 스크립트에서 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+ "\\" +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 ( "Удаление отменено" ); //--- }
폴더를 정리하려고 하면 오류 5026이 표시됩니다. (폴더를 지울 수 없음).
이 스크립트는 문서( FolderDelete() 함수 섹션)에서 가져오고 약간 수정했습니다. 다른 하위 폴더나 파일이 포함된 폴더를 완전히 삭제하려면 폴더를 비워야 합니다. 이를 위해 FolderClean() 함수에 대한 호출이 추가되었습니다.
이 스크립트에서 FolderClean() 함수가 작동하지 않는 이유는 무엇입니까?
폴더를 정리하려고 하면 오류 5026이 표시됩니다. (폴더를 지울 수 없음).
이 스크립트는 문서( FolderDelete() 함수 섹션)에서 가져오고 약간 수정했습니다. 다른 하위 폴더나 파일이 포함된 폴더를 완전히 삭제하려면 폴더를 비워야 합니다. 이를 위해 FolderClean() 함수에 대한 호출이 추가되었습니다.
다른 사람의 샌드박스(MQL4에서)에 들어가려고 하는 것이 귀찮지 않습니까?
다른 사람의 샌드박스(MQL4에서)에 들어가려고 하는 것이 귀찮지 않습니까?
나는 당신을 잘 이해하지 못했습니다. 무슨 뜻이에요. 실험은 MT4에서 수행되었습니다.
파일 열기 :
메모
보안상의 이유로 파일 작업은 MQL5 언어로 엄격하게 제어됩니다. MQL5 언어를 통해 파일 작업이 수행되는 파일은 "샌드박스" 파일 외부에 있을 수 없습니다.
파일은 MQL5\Files 하위 폴더(또는 테스트의 경우 testing_agent_directory\MQL5\Files)의 클라이언트 터미널 폴더에서 열립니다. 플래그 중 FILE_COMMON을 지정하면 모든 클라이언트 터미널 \ Terminal\Common\Files의 공통 폴더에서 파일이 열립니다.
파일 열기 :
메모
보안상의 이유로 파일 작업은 MQL5 언어로 엄격하게 제어됩니다. MQL5 언어를 통해 파일 작업이 수행되는 파일은 "샌드박스" 파일 외부에 있을 수 없습니다.
파일은 MQL5\Files 하위 폴더(또는 테스트의 경우 testing_agent_directory\MQL5\Files)의 클라이언트 터미널 폴더에서 열립니다. 플래그 중 FILE_COMMON을 지정하면 모든 클라이언트 터미널 \ Terminal\Common\Files의 공통 폴더에서 파일이 열립니다.
이 스크립트는 문서에서 가져왔습니다.
폴더가 생성되는 경로는 다음과 같습니다.
string working_folder= TerminalInfoString ( TERMINAL_DATA_PATH )+ "\\MQL4\\Files" ;
부분적으로 FolderDelete() 함수가 작동하여 비어 있는 폴더를 삭제합니다. 그러나 폴더 안에 파일이 있고 먼저 삭제해야 하기 때문에 FolderDelete() 함수는 더 이상 파일이 있는 폴더에서 작동하지 않습니다. 그것을 지우기 위해 지침에 따라야 하므로 FolderClean() 함수에 대한 호출을 추가했습니다. 그런데 어떤 이유로 FolderClean() 함수가 작동하지 않고 파일이 있는 폴더가 정리되지 않습니다. 따라서 FolderDelete() 함수에 의해 삭제되지 않습니다.
파일 열기 :
메모
보안상의 이유로 파일 작업은 MQL5 언어로 엄격하게 제어됩니다. MQL5 언어를 통해 파일 작업이 수행되는 파일은 "샌드박스" 파일 외부에 있을 수 없습니다.
파일은 MQL5\Files 하위 폴더(또는 테스트의 경우 testing_agent_directory\MQL5\Files)의 클라이언트 터미널 폴더에서 열립니다. 플래그 중 FILE_COMMON을 지정하면 모든 클라이언트 터미널 \ Terminal\Common\Files의 공통 폴더에서 파일이 열립니다.
코드가 MQL4인지 MQL5인지에는 차이가 없습니다. 이 스크립트의 코드는 두 플랫폼에서 동일하게 작동합니다. MT4에서 테스트했습니다.
기존 터미널에서 MQL5 코드를 실행하셨나요? 지금 확인하겠습니다...
기존 터미널에서 MQL5 코드를 실행하셨나요? 지금 확인하겠습니다...