FolderDelete

Elimina el directorio especificado. Si la carpeta no está vacía, no se puede eliminarla.

bool  FolderDelete(
   string  folder_name,       // cadena con el nombre de la carpeta a eliminar
   int     common_flag=0      // zona de alcance
   );

Parámetros

folder_name

[in]  Nombre del directorio que hay que eliminar. Contiene la ruta entera hacia la carpeta.

common_flag=0

[in] Bandera que determina la ubicación de la carpeta. Si es common_flag=FILE_COMMON, la carpeta se encuentra en la carpeta compartida de todos los terminales de cliente \Terminal\Common\Files. De lo contrario, la carpeta se encuentra en la carpeta local (MQL5\files o MQL5\tester\files en caso de prueba).

Valor devuelto

Devuelve true en caso de éxito, de lo contrario devuelve false.

Nota

Si el directorio contiene al menos un archivo y/o un subdirectorio, es imposible eliminar este directorio; previamente hay que desocuparlo. La liberación total de una carpeta de todos los archivos y subcarpetas anidadas se realiza mediante la función FolderClean().

Ejemplo:

//+------------------------------------------------------------------+
//|                                            Demo_FolderDelete.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://team.metaquotes.ru/email/view/599588"
#property version   "1.00"
//--- descripción
#property description "El script muestra el ejemplo del uso de FolderDelete()."
#property description "Primero se crean dos carpetas: una está vacía, la otra contiene el archivo."
#property description "Cuando se intenta eliminar la carpeta no vacía, se devuelve el error y se muestra la advertencia."
 
//--- mostraremos la ventana de los parámetros de entrada durante el inicio del script
#property script_show_inputs
//--- parámetros de entrada
input string   firstFolder="empty";    // carpeta vacía
input string   secondFolder="nonempty";// carpeta que va a contener un archivo
string filename="delete_me.txt";       // nombre del archivo que vamos a crear en la carpeta secondFolder
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- escribiremos el manejador del archivo aquí
   int handle;
//--- buscaremos la carpeta en la que trabajamos
   string working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files";
//--- mensaje de depuración   
   PrintFormat("working_folder=%s",working_folder);
//--- intento de crear una carpeta vacía respecto a la ruta MQL5\Files
   if(FolderCreate(firstFolder,0)) // 0 significa que estamos trabajando en la carpeta local del terminal
     {
      //--- mostraremos la ruta completa de la carpeta creada
      PrintFormat("Hemos creado la carpeta %s",working_folder+"\\"+firstFolder);
      //--- anularemos el código del error
      ResetLastError();
     }
   else
      PrintFormat("Fallo al crear la carpeta %s. Código del error %d",working_folder+"\\"+firstFolderGetLastError());
 
//--- ahora crearemos una carpeta no vacía usando la función FileOpen()
   string filepath=secondFolder+"\\"+filename;  // formaremos la ruta para el archivo que queremos abrir para la escritura en la carpeta no existente
   handle=FileOpen(filepath,FILE_WRITE|FILE_TXT); // la bandera FILE_WRITE es obligatoria en este caso, ver la ayuda sobre la función FileOpen
   if(handle!=INVALID_HANDLE)
      PrintFormat("El archivo %s ha sido abierto para la lectura",working_folder+"\\"+filepath);
   else
      PrintFormat("Fallo al crear el archivo %s en la carpeta %s. Código del error=",filename,secondFolderGetLastError());
 
   Comment(StringFormat("Preparándose para eliminar las carpetas %s y %s"firstFoldersecondFolder));
//--- Una pequeña pausa de 5 segundos para que nos de tiempo a leer el mensaje en el gráfico
   Sleep(5000); // ¡No se puede usar Sleep() en los indicadores!
 
//--- mostramos la ventana de diálogo y pedimos al usuario
   int choice=MessageBox(StringFormat("¿Desea eliminar las carpetas %s y %s?"firstFoldersecondFolder),
                         "Eliminando carpetas",
                         MB_YESNO|MB_ICONQUESTION); //  habrá dos botones - "Yes" y "No"
 
//--- ejecutaremos la acción en función de la opción escogida
   if(choice==IDYES)
     {
      //--- quitamos el comentario del gráfico
      Comment("");
      //--- mostraremos el mensaje en el diario "Asesores Expertos"
      PrintFormat("Intentamos eliminar las carpetas %s y %s",firstFoldersecondFolder);
      ResetLastError();
      //--- eliminamos la carpeta vacía
      if(FolderDelete(firstFolder))
         //--- debe aparecer el siguiente mensaje porque la carpeta está vacía
         PrintFormat("La carpeta %s ha sido eliminada con éxito",firstFolder);
      else
         PrintFormat("Fallo al eliminar la carpeta %s. Código del error=%d"firstFolderGetLastError());
 
      ResetLastError();
      //--- eliminamos la carpeta que contiene el archivo 
      if(FolderDelete(secondFolder))
         PrintFormat("La carpeta %s ha sido eliminada con éxito"secondFolder);
      else
         //--- debe aparecer este mensaje porque hay un archivo dentro de la carpeta
         PrintFormat("Fallo al eliminar la carpeta %s. Código del error=%d"secondFolderGetLastError());
     }
   else
      Print("Eliminación cancelada");
//---
  }

Véase también

FileOpen(), FolderClean(), FileMove()