Un dossier n'est pas supprimé s'il contient des fichiers non fermés. - page 4

 
Реter Konow:

Je veux dire, avez-vous créé un EA à partir d'un script et essayé de l'exécuter ?

Trop paresseux pour vérifier, mais si vous essayez les drapeaux FILE_SHARE_READ etFILE_SHARE_WRITE...
 
A100 Et essayez FILE_COMMON partout.

STARIJ Pourquoi le refaire ? Je suis trop paresseux pour vérifier, mais si vous essayez les drapeaux FILE_SHARE_READ etFILE_SHARE_WRITE

Le problème est que l'on ne voit pas bien ce que ces drapeaux ont à voir avec FolderClean(). Pas du tout, à mon avis.

Je veux prouver que ce n'est pas du tout une question de dossier. Je vais refaire le script, pour qu'il crée un dossier "DeleteMe.txt" au lieu du dossier "notempty", puis il efface ce dossier, comme il a essayé de le faire avec le fichier avant. Voyons si cela fait une différence).

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
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
 
Реter Konow:

Le problème est que l'on ne voit pas bien ce que ces drapeaux ont à voir avec FolderClean(). Pas du tout, à mon avis.

un dossier peut être supprimé s'il ne contient aucun fichier, ou s'il peut être supprimé. Ces drapeaux permettent d'accéder au fichier

 
Реter Konow:

Je veux dire, avez-vous créé un EA à partir d'un script et essayé de l'exécuter ?

Où ai-je dit que j'ai fait une EA ?

 

Je dois dire qu'effectivement, la fermeture explicite du fichier fonctionne. Je suppose que j'avais tort. La première fois, cela n'a pas fonctionné, probablement parce que je n'ai pas enregistré une nouvelle version du script remanié et que la fermeture explicite n'a pas pris effet.

Maintenant, j'ai essayé de créer des dossiers au lieu d'un fichier. Ils se sont effacés sans aucun problème.

Ensuite, la création de fichiers a été ajoutée à nouveau. Résultat : sans fermer explicitement le fichier, le dossier n'est pas effacé par le script comme avant. Avec la fermeture explicite du dossier, celui-ci est complètement effacé.

Bien sûr, cette expérience n'explique pas tout et certaines choses restent floues pour l'instant, mais ce résultat est édifiant.

Je vais continuer à faire des tests et je vous ferai part des résultats.

Il peut encore y avoir des problèmes, et il est difficile d'en être sûr pour le moment.

 
Alexey Viktorov:

Où ai-je dit ce que le conseiller a fait ?

Je m'excuse, j'ai mal compris.
 

Voici le code du script qui crée le fichier "DeleteMe.txt" et "DeleteMe Folder". Le fichier se ferme explicitement immédiatement après sa création.

Tout semble fonctionner...

//+------------------------------------------------------------------+ 
//|                                            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 FolderName="delete_me Folder";       // имя файла, который мы создадим в папке secondFolder 
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());
 
//--- теперь создадим пустую папку с помощью функции FolderCreate 
   string filepath=secondFolder+"\\"+FolderName;  // сформируем путь для файла, который хотим открыть на запись в несуществующей папке 

   if(FolderCreate(filepath)) 
     { 
      FolderCreate(filepath + "1");
      PrintFormat("Открыли папку %s",working_folder+"\\"+filepath); 
     } 
   else 
      PrintFormat("Не удалось создать папку %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); 
     } 
   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("Удаление отменено"); 
//--- 
  }


 
Реter Konow:

Bien sûr, cette expérience n'explique pas tout et certaines choses restent vagues à ce jour, mais ce résultat est inspirant.

Je vais continuer à faire des tests et je vous ferai part des résultats.

Il peut y avoir encore des problèmes et il est difficile d'en être sûr pour le moment.

Oui, bien sûr que vous pouvez, et gardez les détails pour vous, dites simplement "j'ai changé l'exemple de l'aide, rien du tout".

Et nous continuerons à deviner - parce que tout le monde peut deviner avec des journaux. Et c'est beaucoup plus intéressant de cette façon.

 
Rashid Umarov:

Oui, bien sûr, écrivez. Et les détails restent pour eux, dites juste "j'ai changé un petit exemple d'aide, rien du tout.

Et nous continuerons à deviner, car avec les journaux, tout le monde peut deviner, et c'est bien plus intéressant ainsi.

Bizarre. Il n'y a rien de personnel. Si je ne suis pas professionnel, je suis désolé. Je vais apprendre.

Merci pour votre aide.


P.S. Je n'ai jamais demandé d'aide sur le forum. D'où l'inexpérience.

 

Je me souviens de votre "J'ai tous les mouvements écrits" dans le fil de discussion sur la programmation OOP vs procédurale. Dans ce fil de discussion, j'étais juste convaincu qu'on ne pouvait pas vous faire confiance.

Il n'y a aucune preuve et aucun détail - pas besoin d'écrire à Servicedesk.