Filesフォルダに作成されたファイルをMoveFileExWを使って移動させるプログラム

Filesフォルダに作成されたファイルをMoveFileExWを使って移動させるプログラム

サムネ
おはようございます。 fx-on.comの岩淵です。 昨夜からドル円が絶賛暴落中でございます。 この記事を執筆中も一瞬114円台をつけていました。 今年の相場は随分と荒れていますので皆さんお気をつけてトレードして下さい。 では本題です。 MQL4でプログラムを作っていると、テキストファイルを出力したりcsvファイルを出力したりする機会があるかと思います。 MT4でファイル作成処理をすると、作成されたファイルはデータフォルダのMQL4フォルダ内にあるFilesフォルダ内に保存されます。 (バックテスト時はTesterフォルダ内のFilesフォルダに作成されます) しかしファイル作成をやっていると、Filesフォルダ以外のフォルダ(例えばExpertsフォルダ)へ保存したい場面が多々あったので、今回はその方法をお伝えいたします。

準備

Filesフォルダ内に予めtest.txtを作成しておきます。 今回はFilesフォルダ内に作成したtest.txtをExpertsフォルダ内へ移動したいと思います。

コード

スクリプトとしてファイルを作成していきます。 今回はFileNameという外部パラメータを用意し、このパラメータに指定されたファイルをFilesフォルダからExpertsへ移動させたいと思います。
extern string FileName = "test.txt";
ソースコードの上部にて、Kernel.dllからMoveFileExWをインポートします。
#import "Kernel32.dll"
bool MoveFileExW(
   string &lpExistingFileName, //既存のファイル名
   string &lpNewFileName,      //新しいファイル名
   int dwFlags                 //移動オプション
);
#import
第3引数に指定するパラメータも定義しておきます。
#define MOVEFILE_REPLACE_EXISTING 0x1
MoveFileExWの基本的な使い方は、第1引数に移動したいファイル名、第2引数に移動後のファイル名、第3引数には先ほど定義MOVEFILE_REPLACE_EXISTINGを指定するだけです。 MoveFileExの詳しい使い方についてはこちらをご参考にしてください。 https://msdn.microsoft.com/ja-jp/library/cc429621.aspx MoveFileExのインポートさえ出来てしまえば、あとは適切なファイル名を指定して関数を実行するだけです。 ただしファイル名はファイルまでのパスも含めて指定する必要があります。 データフォルダまでのパスはTerminalInfoString(TERMINAL_DATA_PATH)で取得できますので、それを利用します。
string existing_file, new_file;

existing_file  = TerminalInfoString(TERMINAL_DATA_PATH);
existing_file += "\\MQL4\\Files\\";
existing_file += FileName;

new_file       = TerminalInfoString(TERMINAL_DATA_PATH);
new_file      += "\\MQL4\\Experts\\";
new_file      += FileName;
ソースコード全体は以下の通りです。
#property version   "1.00"
#property strict
#property show_inputs

#import "Kernel32.dll"
bool MoveFileExW(
   string &lpExistingFileName, //既存のファイル名
   string &lpNewFileName,      //新しいファイル名
   int dwFlags                 //移動オプション
);
#import

#define MOVEFILE_REPLACE_EXISTING 0x1

extern string FileName = "test.txt";

void OnStart(){
   string existing_file, new_file;
   
   existing_file  = TerminalInfoString(TERMINAL_DATA_PATH);
   existing_file += "\\MQL4\\Files\\";
   existing_file += FileName;
   
   new_file       = TerminalInfoString(TERMINAL_DATA_PATH);
   new_file      += "\\MQL4\\Experts\\";
   new_file      += FileName;
   
   if(MoveFileExW(existing_file, new_file, MOVEFILE_REPLACE_EXISTING)){
      Alert("ファイルを移動しました。");
   }
   else{
      Alert("ファイルの移動に失敗しました。");
   }
}
完成したスクリプトを実行するとFilesフォルダに保存されていたtext.txtがExpertsフォルダ内に移動します。 簡単でしたが以上です。
■ 投資商品等に関する重要事項およびリスクについて 【金融商品取引業者】
株式会社ゴゴジャン 関東財務局長(金商)第1960号
【加入協会】
一般社団法人 日本投資顧問業協会
【手数料・費用等について】
当社プラットフォームで提供するソフトウェア、電子書籍、投資助言サービス等のご利用には、商品ごとに定められた購入代金が発生します。 また、お客様が実際の金融商品取引(FXやCFD取引等)を行う際には、接続先の証券会社等において、取引手数料やスプレッド(売値と買値の差)等の費用が発生する場合があります。
【証拠金および損失リスクについて】
FX(外国為替証拠金取引)やCFD(差金決済取引)等の取引は、預託した証拠金の額を上回る取引が可能であるため、対象とする指標(通貨・商品価格等)の急激な変動により、預託証拠金を上回る損失(元本超過損)が生じるおそれがあります。 また、金融商品取引には価格変動等のリスクがあり、投資元本を割り込む、あるいは元本を超える損失が生じる場合があります。
【サービスの性質および取引主体について】
当社は投資用ソフトウェアおよび投資情報の提供を行うプラットフォーム(マーケットプレイス)であり、お客様に代わって金融商品の売買、媒介、取次、または代理を行うものではありません。 当社が提供するサービスや情報は投資判断の参考として提供するものであり、将来の利益や特定の成果を保証するものではありません。 一部に投資助言サービスを含みますが、特定の金融商品の売買を強制、または勧誘するものではありません。 最終的な投資判断および取引の実行は、お客様ご自身の責任において行っていただきますようお願いいたします。
商号 株式会社ゴゴジャン
金融商品取引業の登録番号 関東財務局長(金商)第1960号
加入協会 一般社団法人 日本投資顧問業協会
商号 株式会社ゴゴジャン
金融商品取引業の登録番号
関東財務局長(金商)第1960号
加入協会 一般社団法人
日本投資顧問業協会
金融庁日本投資顧問業協会証券・金融商品あっせん相談センター証券取引等監視委員会

Copyright © 2026 GogoJungle Inc. All Rights Reserved.