FolderClean() işlevi neden bu komut dosyasında çalışmıyor: ?
//+------------------------------------------------------------------+ //| 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 ( "Удаление отменено" ); //--- }
Bir klasörü temizleme girişiminin bir sonucu olarak, 5026 - (klasör temizlenemiyor) hatası veriyor.
Bu komut dosyası belgelerden alınmıştır ( KlasörDelete() işlevinin bölümü) ve biraz değiştirilmiştir. Diğer alt klasörleri veya dosyaları içeren bir klasörü tamamen silmek için onu boşaltmanız gerekir. Bunun için FolderClean() işlevine bir çağrı eklendi.
FolderClean() işlevi neden bu komut dosyasında çalışmıyor: ?
Bir klasörü temizleme girişiminin bir sonucu olarak, 5026 - (klasör temizlenemiyor) hatası veriyor.
Bu komut dosyası belgelerden alınmıştır (KlasörDelete() işlevinin bölümü) ve biraz değiştirilmiştir. Diğer alt klasörleri veya dosyaları içeren bir klasörü tamamen silmek için onu boşaltmanız gerekir. Bunun için FolderClean() işlevine bir çağrı eklendi.
Başka birinin sanal alanına (MQL4'te) girmeye çalışmanız sizi rahatsız etmiyor mu?
Başka birinin sanal alanına (MQL4'te) girmeye çalışmanız sizi rahatsız etmiyor mu?
ben seni pek anlamadım Ne demek istiyorsun. Deney MT4 üzerinde gerçekleştirildi.
Dosya Aç :
Not
Güvenlik nedeniyle, dosyalarla çalışmak MQL5 dilinde sıkı bir şekilde kontrol edilir. MQL5 dili aracılığıyla dosya işlemlerinin gerçekleştirildiği dosyalar "sandbox" dosyasının dışında bulunamaz.
Dosya, MQL5\Files alt klasöründeki (veya test durumunda test_agent_directory\MQL5\Files) istemci terminal klasöründe açılır. İşaretler arasında FILE_COMMON belirtilirse, dosya tüm istemci terminalleri \ Terminal\Common\Files ortak klasöründe açılır.
Dosya Aç :
Not
Güvenlik nedeniyle, dosyalarla çalışmak MQL5 dilinde sıkı bir şekilde kontrol edilir. MQL5 dili aracılığıyla dosya işlemlerinin gerçekleştirildiği dosyalar "sandbox" dosyasının dışında bulunamaz.
Dosya, MQL5\Files alt klasöründeki (veya test durumunda test_agent_directory\MQL5\Files) istemci terminal klasöründe açılır. İşaretler arasında FILE_COMMON belirtilirse, dosya tüm istemci terminalleri \ Terminal\Common\Files ortak klasöründe açılır.
Bu komut dosyası belgelerden alınmıştır.
İşte klasörlerin oluşturulduğu yol:
string working_folder= TerminalInfoString ( TERMINAL_DATA_PATH )+ "\\MQL4\\Files" ;
Kısmen, FolderDelete() işlevi çalışır ve boş olan klasörü siler. Ancak, FolderDelete() işlevi artık dosya içeren bir klasörde çalışmaz, çünkü klasörün içinde bir dosya vardır ve önce bu dosyanın silinmesi gerekir. Silmek için, talimatlara göre olması gerektiği gibi FolderClean() işlevine bir çağrı ekledim. Ancak, FolderClean() işlevi nedense çalışmıyor ve dosyanın bulunduğu klasör temizlenmiyor. Sonuç olarak, FolderDelete() işlevi tarafından silinmez.
Dosya Aç :
Not
Güvenlik nedeniyle, dosyalarla çalışmak MQL5 dilinde sıkı bir şekilde kontrol edilir. MQL5 dili aracılığıyla dosya işlemlerinin gerçekleştirildiği dosyalar "sandbox" dosyasının dışında bulunamaz.
Dosya, MQL5\Files alt klasöründeki (veya test durumunda test_agent_directory\MQL5\Files) istemci terminal klasöründe açılır. İşaretler arasında FILE_COMMON belirtilirse, dosya tüm istemci terminalleri \ Terminal\Common\Files ortak klasöründe açılır.
Kodun MQL4 veya MQL5 olması arasında fark yoktur. Bu betiğin kodu her iki platformda da aynı şekilde çalışır. MT4'te test ettim.
MQL5 kodunu eski terminalde çalıştırdınız mı? şimdi kontrol edeceğim...
MQL5 kodunu eski terminalde çalıştırdınız mı? şimdi kontrol edeceğim...
İnanın bunda hiçbir sorun yok.
Kanıtlanması gereken şey: eski terminal MQL5 programlarını GÖREMİYOR. Bir MQL5 komut dosyasında başka birinin dosya sanal alanını açmaya çalışıyorsunuz.
Реter Konow :
Ancak, FolderClean() işlevi nedense çalışmıyor ve dosyanın bulunduğu klasör temizlenmiyor. Sonuç olarak, FolderDelete() işlevi tarafından silinmez.
Nedense işletim sistemi dosyanın silinmesine izin vermiyor - ya başka bir program tarafından açılıyor ya da yeterli haklar yok.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz