FileFindFirst

この関数は指定されたフィルタに基づいてディレクトリ内のファイルまたはサブディレクトリの検索を開始します。

long  FileFindFirst(
  const string  file_filter,          // 文字列の検索フィルタ
  string&        returned_filename,   // 見つかったファイルまたはサブディレクトリの名称
  int            common_flag=0         // 検索を定義する
  );

パラメータ

file_filter

[in]  検索フィルタ。ファイル検索に使用される、\Files ディレクトリに相対したサブディレクトリ(またはネストされたサブディレクトリのシーケンス)が指定されます。

returned_filename

[out]  戻されたパラメータ。成功の場合には、最初に見つかったファイルまたはサブディレクトリの名称が配置されます。拡張子を含んだファイル名のみが返されます。ディレクトリ及びサブディレクトリは検索フィルタに含まれている場合でも結果に含まれません。

common_flag

[in]  ファイルの場所を決めるフラグ。common_flag = FILE_COMMON の場合、ファイルは全てのクライアント端末の共有フォルダ \Terminal\Common\Files 内に存在します。その他の場合、ファイルはローカルフォルダに存在します。

戻り値

FileFindNext() 関数によってファイルとサブディレクトリのさらなるソートに使用される検索オブジェクトのハンドル、または、フィルタに対応するファイルとサブディレクトリが存在しない場合(特別なケースではディレクトリが空の場合)はINVALID_HANDLE。検索後はFileFindClose() 関数を使用してハンドルを閉じるべきです。

注意事項

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

例:

//--- スクリプト起動時に入力パラメータウィンドウを表示する
#property script_show_inputs
//--- フィルタ
input string InpFilter="Dir1\\*";
//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
  string file_name;
  string int_dir="";
  int    i=1,pos=0,last_pos=-1;
//--- 最後のバックスラッシュを探す
  while(!IsStopped())
    {
     pos=StringFind(InpFilter,"\\",pos+1);
    if(pos>=0)
        last_pos=pos;
    else
        break;
    }
//--- フィルタにフォルダ名が含まれる
  if(last_pos>=0)
     int_dir=StringSubstr(InpFilter,0,last_pos+1);
//--- ローカルフォルダのルートで検索ハンドルを取得する
  long search_handle=FileFindFirst(InpFilter,file_name);
//--- FileFindFirst() の実行が成功したかをチェックする
  if(search_handle!=INVALID_HANDLE)
    {
    //--- 渡された文字列がファイル名かディレクトリ名かをループでチェックする
    do
       {
        ResetLastError();
        //--- ファイルの場合、関数が true を返し、ディレクトリの場合 ERR_FILE_IS_DIRECTORY エラーを返す
        FileIsExist(int_dir+file_name);
        PrintFormat("%d : %s name = %s",i,GetLastError()==ERR_FILE_IS_DIRECTORY ?"Directory" : "File",file_name);
        i++;
       }
    while(FileFindNext(search_handle,file_name));
    //--- 検索ハンドルを閉じる
    FileFindClose(search_handle);
    }
  else
    Print("Files not found!");
 }

参照

FileFindNextFileFindClose