Filesフォルダ以外にあるファイルの存在有無を確認する方法

Windows APIのPathFileExistsW関数を使うべし

特定のインジケーターを読み込むことを前提にしたEAやインジケーターを作りたい時ってありますよね。

当然ながら読み込むインジケーターが存在しないと、そのEAやインジケーターは正しく動作しません。

エラーで止まってくれれば良いのですが、親切?にも動いてしまいます。そのため、異常に気づきにくいやっかいな問題です。

じゃあ、読み込むインジケーターがちゃんと存在しているか最初にチェックすればいいんじゃない?と思うのが自然です。

で、何か関数ないかな~とMQL4のリファレンスを検索するわけです。

ありました、FileIsExist関数

「これで万事解決だ!」と言いたいところですが、そうは問屋が卸しません。

MQL4組み込み関数のFileIsExist関数はFilesフォルダしか参照できない仕様になっています。

はい、詰んだ。/(^o^)\

実現したいのはIndicatorsフォルダ内の参照ですね。インジケーターはIndicatorsフォルダに設置しますから。

チェックするのは諦めるかーとなりがちです。

でも、大丈夫です。

Windows APIのPathFileExistsW関数を使えばFilesフォルダ以外のフォルダも参照できるようになります。

PathFileExistsW関数に与える引数は存在有無を確認したいインジケーターファイルのフルパスだけです。

あればtrue、なければfalseが戻ってきます。

Windows APIを使う時は、#importで使いたい関数をインポートし、それから呼び出したい箇所で呼び出せばOKです。

サンプルコードを以下に載せておきます。

#import "shlwapi.dll"
  bool PathFileExistsW(string pszPath);
#import

int OnInit()
{
  // 必要インジケーターのチェック
  if(PathFileExistsW(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\Indicators\\インジケーターファイル名.ex4") == false){
    MessageBox("インジケーターファイル名.ex4がIndicatorsフォルダに設置されていません。\n設置してから本EAをチャートに適用してください。", "ファイル存在チェックエラー", MB_ICONSTOP);
    return(INIT_FAILED);
  }
}

困った時はWindows API。Windows上の操作なら大抵のことは実現できるはずです。

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG