FolderDelete

函数删除指定目录,如果文件夹不是空的,就不能被删除。

bool  FolderDelete(
   string  folder_name,       // 带有要删除的文件夹名的字符串
   int     common_flag=0      // 范围
   );

参量

folder_name

[in] 想要删除的目录名称,包括文件夹的全部路径。

common_flag=0

[in] Flag 决定目录位置,如果common_flag=FILE_COMMON,那么目录在所有客户端的共享目录中 \Terminal\Common\Files,否则,目录会在本地文件夹中(MQL5\Files 或者 MQL5\tester\Files )。

返回值

如果成功返回true, 否则false。

注释

出于安全考虑,工作文件必须严格由MQL5语言管理。使用MQL5实 施文件操作的文件意味着,不能在文件沙箱外。

如果目录至少包括一个文件和/或子目录,目录就不能删除,必须先清理。使用 FolderClean() 清理文件夹中所有文件或者子目录。

示例 :

//+------------------------------------------------------------------+
//|                                            Demo_FolderDelete.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- 描述
#property description "The script shows a sample use of FolderDelete()."
#property description "First two folders are created; one of them is empty, the second one contains a file."
#property description "When trying to delete a non-empty folder, an error is returned and a warning is shown."
 
//--- 启动脚本时显示输入参数对话框
#property script_show_inputs
//--- 输入参数
input string   firstFolder="empty";    // 空文件夹
input string   secondFolder="nonempty";// 将会创建文件的文件夹
string filename="delete_me.txt";       // 将在secondFolder文件夹创建的文件名称
//+------------------------------------------------------------------+
//| 脚本程序启动函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 在这里写下文件句柄
   int handle;
//--- 找出我们正在工作的文件夹
   string working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files";
//--- 调试信息   
   PrintFormat("working_folder=%s",working_folder);
//--- 试图创建MQL5\Files路径相关的空文件夹
   if(FolderCreate(firstFolder,0)) // 0 意味着我们在程序端的本地文件夹工作
     {
      //--- 向已创建的文件夹输入全路径
      PrintFormat("Folder %s has been created",working_folder+"\\"+firstFolder);
      //--- 重置错误代码
      ResetLastError();
     }
   else
      PrintFormat("Failed to create folder %s. Error code %d",working_folder+"\\"+firstFolderGetLastError());
 
//--- 现在使用FileOpen()函数创建一个非空文件夹
   string filepath=secondFolder+"\\"+filename;  // 形成我们想要打开写在不存在文件夹中的路径文件
   handle=FileOpen(filepath,FILE_WRITE|FILE_TXT); // 这种情况下FILE_WRITE标识是必须的,请见Help查询FileOpen
   if(handle!=INVALID_HANDLE)
      PrintFormat("File %s has been opened for reading",working_folder+"\\"+filepath);
   else
      PrintFormat("Failed to create file %s in folder %s. Error code=",filename,secondFolderGetLastError());
 
   Comment(StringFormat("Prepare to delete folders %s and %s"firstFoldersecondFolder));
//--- 短暂停顿5秒来阅读图表中的信息
   Sleep(5000); // Sleep() 不能用在指标中!
 
//--- 显示询问用户的对话框
   int choice=MessageBox(StringFormat("Do you want to delete folders %s and %s?"firstFoldersecondFolder),
                         "Deleting folders",
                         MB_YESNO|MB_ICONQUESTION); //  两个按钮 - "Yes" 和 "No"
 
//--- 根据选定的变量运行一个行为
   if(choice==IDYES)
     {
      //--- 从图表删除评论
      Comment("");
      //--- 添加信息到“专家”日志
      PrintFormat("Trying to delete folders %s and %s",firstFoldersecondFolder);
      ResetLastError();
      //--- 删除空文件夹
      if(FolderDelete(firstFolder))
         //--- 由于文件夹为空,应该会出现以下信息
         PrintFormat("Folder %s has been successfully deleted",firstFolder);
      else
         PrintFormat("Failed to delete folder %s. Error code=%d"firstFolderGetLastError());
 
      ResetLastError();
      //--- 删除包含文件的文件夹 
      if(FolderDelete(secondFolder))
         PrintFormat("Folder %s has been successfully deleted"secondFolder);
      else
         //--- 由于文件夹包含文件,应该会出现下列信息
         PrintFormat("Failed to delete folder %s. Error code=%d"secondFolderGetLastError());
     }
   else
      Print("Deletion canceled");
//---
  }

另见

FileOpen(), FolderClean(), FileMove()