MetaTraderからファイル書き込みができない。 | MetaTraderの足跡

MetaTraderの足跡

MetaTrader4/5のプログラムのブログです。

MQL4からファイルに書き込めない理由はいくつか考えられます。手動でフォルダにファイルを作成・書き込みできるが、プログラム上でできない場合、以下のポイントを確認することをお勧めします。

1. MQL4のファイルパスの制限

MQL4にはセキュリティ上の理由から、ファイルの読み書きができる場所が制限されています。通常、MQL4は次の場所にしかアクセスできません。

  • TerminalDirectory\MQL4\Files
  • Common AppData\MQL4\Files(複数のMetaTraderインストールで共有するフォルダ)

解決策

  • ファイル書き込み先を MQL4\Files フォルダに変更するか、絶対パスではなく相対パスでアクセスしてみてください。 例:
    int handle = FileOpen("test.txt", FILE_WRITE|FILE_TXT); if (handle > 0) { FileWrite(handle, "Test data"); FileClose(handle); } else { Print("File open error: ", GetLastError()); } 

2. 書き込み権限の再確認

MQL4が正しくフォルダにアクセスできていない可能性があります。プログラムが正しく権限を持っているか確認するため、以下の手順を試してください。

解決策

  • MQL4が実行されているプログラム(MetaTrader)が管理者権限で実行されているか確認します。MetaTraderを右クリックし、「管理者として実行」を選択します。

3. Windows Defenderまたはアンチウイルスソフトのブロック

Windows Defenderや他のセキュリティソフトが、MQL4プログラムの外部ファイルへのアクセスを制限している場合があります。

解決策

  • Windows Defenderの「コントロールされたフォルダアクセス」機能が有効になっていると、ファイルの書き込みがブロックされることがあります。以下の手順で確認し、無効にしてみてください。
    1. 「設定」 → 「更新とセキュリティ」 → 「Windows セキュリティ」 → 「ウイルスと脅威の防止」へ進みます。
    2. 「ランサムウェア防止」セクションで「コントロールされたフォルダアクセスの管理」をクリックし、無効にします。

4. パスの使用方法

MQL4プログラム内で指定するパスが間違っている場合もあります。特に、フォルダが「Roaming」ディレクトリにあるため、絶対パスの指定方法に注意が必要です。

解決策

  • TerminalPath()CommonDataPath() 関数を使って、正しいパスを取得することができます。例えば、CommonDataPath() を使って共有フォルダに書き込むことができます。
    string path = CommonDataPath() + "\\MetaQuotes\\Files\\test.txt"; int handle = FileOpen(path, FILE_WRITE|FILE_TXT); if (handle > 0) { FileWrite(handle, "Test data"); FileClose(handle); } else { Print("File open error: ", GetLastError()); } 

これらの手順を試して、問題が解決するか確認してみてください。