FileFindFirst 関数
この関数は、指定したフィルタに従って、指定したフォルダ内のファイル および サブフォルダを検索します。
検索に指定できるフォルダは次の 2箇所です。
① …\Terminal\〇〇〇\MQL4\Files
② …\Terminal\Common\Files
です。①の「〇〇〇」はインストールしたMT4の任意の文字列です。
MQL4でファイル操作を実行するファイルは、セキュリティ上の理由でこれら 2つのフォルダ以外に置くことはできません。
上記フォルダは、MT4のメニュー「ファイル」→「データフォルダを開く」で展開されたフォルダから、①のフォルダは展開したフォルダの中に「MQL4」フォルダ があるので、その中に「Files」フォルダがあります。②のフォルダは展開したフォルダの1つ上の階層に「Common」フォルダがあるので、その中に「Files」フォルダがあります。
データ型と構成・戻り値
long FileFindFirst(①, ②, ③);
戻り値は、検索したオブジェクトのハンドルを返します。
ハンドルは、FileFindNext関数によってファイルとサブフォルダを更に検索するために使用されます。
フィルタに対応するファイルとサブフォルダが無い場合 (特定の場合ではフォルダが空の場合)、INVALID_HANDLE(-1)が返されます。検索後、ハンドルはFileFindClose関数を使用して閉じる必要があります。
引数 [3]
FileFindFirst関数は 3個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | file_filter | const string | - | - | 検索フィルタ。 ファイルを検索するフォルダの \Filesフォルダにあるサブフォルダをフィルタに指定することもできます。 |
② | returned_filename | string& | - | - | 検索したファイル名、サブフォルダ名を受け取る変数。成功した場合、最初に見つかったファイル名またはサブフォルダ名を取得します。 |
③ | common_flag | int | - | 0 | 検索するフォルダの位置。 「FILE_COMMON」の時、 …\Terminal\Common\Files フォルダが指定されます。 「FILE_COMMON」以外の時、 …\Terminal\〇〇〇\MQL4\Files フォルダが指定されます。初期値の「0」はこちらが指定されます。 |
使用例
FileFindFirst関数によるファイルとフォルダの検索
FileFindFirst関数を使って指定したフォルダ内に存在するファイル名とサブフォルダ名を検索します。
今回検索の対象にするフォルダは「…\Terminal\〇〇〇\MQL4\Files」とします。
コード
// FileFindFirst関数によるファイルとフォルダの検索
#property strict
void OnInit() {
string filter = "*"; // 検索フィルタ
string file_name; // 検索ファイル名を受信
long handle;
int i=1, errorcode;
Print("「", filter, "」で検索");
handle = FileFindFirst(filter, file_name); // 指定フォルダ内を検索
if(handle != INVALID_HANDLE) {
do {
ResetLastError(); // エラーコードのリセット
FileIsExist(file_name); // 見つかったファイル名で存在チェック
errorcode = GetLastError(); // 指定した名前がフォルダの場合はエラーコード5019が返されます
if(errorcode == 5019) {
Print( i, "つ目:", file_name, "(フォルダ)");
} else {
Print( i, "つ目:", file_name, "(ファイル)");
}
i++;
} while(FileFindNext(handle,file_name) == true);
FileFindClose(handle);
} else {
Print("ファイル無し");
}
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
結果は各自がフォルダ内に置いてあるファイル名やフォルダ名によって違ってきますので、上の結果は参考として確認してください。