FolderDelete

この関数は、指定されたディレクトリを削除します。フォルダが空でない場合は、削除出来ません。

bool  FolderDelete(
  string  folder_name,      // 削除するフォルダの名称
  int    common_flag=0      // 範囲
  );

パラメータ

folder_name

[in] 削除するディレクトリ名。フォルダの絶対パスを含みます。

common_flag=0

[in]  ディレクトリの場所を決めるフラグ。common_flag=FILE_COMMON の場合、ディレクトリは全てのクライアント端末の共有フォルダ \Terminal\Common\Filesに位置します。その他の場合、ディレクトリはローカルフォルダ(MQL5\Files またはテストの場合 MQL5\Tester\Files)に位置します。

戻り値

成功の場合は true、それ以外の場合は false。

注意事項

セキュリティ上の理由から、MQL5 言語ではファイルの扱いは厳しく制御されています。MQL5 手段を用いて操作されるファイルは、ファイルサンドボックスの外に存在することは出来ません。

ディレクトリが少なくとも1つのファイル及び/またはサブディレクトリを含む場合は、ディレクトリの削除が出来ないので、最初にこれらが削除される必要があります。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+"\\"+firstFolder, GetLastError());
 
//--- FileOpen() 関数で空でないフォルダを作成する
  string filepath=secondFolder+"\\"+filename; // 存在しないフォルダに作成して書き込むファイルのパスを作る
  handle=FileOpen(filepath,FILE_WRITE|FILE_TXT); // この場合 FILE_WRITE は必須です。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,secondFolder, GetLastError());
 
  Comment(StringFormat("Prepare to delete folders %s and %s", firstFolder, secondFolder));
//--- チャートのメッセージを読む5秒の休止
  Sleep(5000); // Sleep() cannot be used in indicators!
 
//--- ダイアログを表示してユーザに聞く
  int choice=MessageBox(StringFormat("Do you want to delete folders %s and %s?", firstFolder, secondFolder),
                        "Deleting folders",
                        MB_YESNO|MB_ICONQUESTION); //  「はい(Y)」 と 「いいえ(N)」 の 2 つのボタン
 
//--- 選択されたバージョンに応じてアクションを実行する
  if(choice==IDYES)
    {
    //--- チャートからコメントを削除
    Comment("");
    //--- エキスパート操作ログにメッセージを加える
    PrintFormat("Trying to delete folders %s and %s",firstFolder, secondFolder);
    ResetLastError();
    //--- 空のフォルダを削除
    if(FolderDelete(firstFolder))
        //--- フォルダが空なので次のメッセージが表示されるべき
        PrintFormat("Folder %s has been successfully deleted",firstFolder);
    else
        PrintFormat("Failed to delete folder %s. Error code=%d", firstFolder, GetLastError());
 
    ResetLastError();
    //--- ファイルを含むフォルダを削除
    if(FolderDelete(secondFolder))
        PrintFormat("Folder %s has been successfully deleted", secondFolder);
    else
        //--- フォルダにファイルが存在するので次のメッセージが表示されるべき
        PrintFormat("Failed to delete folder %s. Error code=%d", secondFolder, GetLastError());
    }
  else
    Print("Deletion canceled");
//---
 }

参照

FileOpen()FolderClean()FileMove()