//+------------------------------------------------------------------+ //| 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"); //--- } |