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