FileOpen

この関数は、指定された名称とフラグでファイルを開きます。

int  FileOpen(
  string  file_name,          // ファイル名
  int    open_flags,          // フラグの組み合わせ
  short  delimiter='\t',     // デリミタ
  uint    codepage=CP_ACP      // コードページ
  );

パラメータ

file_name

[in]  ファイルの名称はサブフォルダを含むことが出来ます。ファイルが書き込み用に開かれている場合は、存在しないサブフォルダは作成されます。

open_flags

[in] ファイル操作のモードを決めるフラグの組み合わせフラグは次の通りです。
FILE_READ - ファイルが読み込みのために開かれる
FILE_WRITE - ファイルが書き込みのために開かれる
FILE_BIN - バイナリ読み書きモード(文字列から/への変換はなし)
FILE_CSV - csv ファイル(unicode または ansi 文字列への変換され区切り文字で区切られる)
FILE_TXT - 単純なテキストファイル( csv と同じだが区切り文字がない)
FILE_ANSI - ANSI 文字列( 1 バイト文字)
FILE_UNICODE - UNICODE 文字列(2 バイト文字)
FILE_SHARE_READ - 複数プログラムから読み込まれる
FILE_SHARE_WRITE - 複数プログラムから書き込まれる
FILE_COMMON - 全てのクライエント端末に共通なファイルの位置( \Terminal\Common\Files )

delimiter='\t'

[in]  txt または csv ファイルでセパレータとして使用される値。csv ファイルのデリミタが指定されていない場合、デフォルトはタブです。txt ファイルのデリミタが指定されていない場合、セパレータは使用されません。セパレータが明らかに 0 に設定されている場合、セパレータは何も使用されません。

codepage=CP_ACP

[in]  コードページの値。よく使用される コードページ では定数が提供されています。

戻り値

ファイルが正常に開かれた場合、この関数は、ファイルデータのアクセスに使用されるファイルハンドルが返されます。失敗した場合 INVALID_HANDLE を返します。

注意事項

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

ファイルを特定のエンコーディング(コードページパラメータにはコードページ値を指定されます)で読み込む必要がある場合は、FILE_ANSIフラグを必ず設定してください。指定されたFILE_ANSIフラグがない場合、テキストファイルは変換なしでUnicodeで読み込まれます。

ファイルは MQL5\files サブフォルダ(テスト時は testing_agent_directory\MQL5\files )内のクライアント端末のフォルダで開かれます。FILE_COMMON フラグが指定されている場合、ファイルは、全てのメタトレーダー5クライアント端末が使用する共有フォルダで開かれます。

「名前付きパイプ」は以下の規則に従って開くことが出来ます。

  • パイプ名は文字列で「\\servername\pipe\pipename」の様な外観を持つべきです。ここで servername はネットワーク内のサーバ名でpipename はパイプ名です。パイプが同じコンピュータ上で使用されている場合はサーバ名は省略出来ますが「\\.\pipe\pipename」のように点を挿入する必要があります。パイプに接続しようとしているクライアントはその名称を知っているべきです。
  • FileFlush() 及び FileSeek() は、パイプから読み込み、それへ書き込みという一連の動作の間に、ファイルの先頭に呼び出す必要があります。

特殊記号「\ 」が表示される文字列で使用されています。従って MQL5 アプリケーションで名称を書く際には「\ 」は二重にされるべきです。つまり上の例はコード内では "\\\\servername\\pipe\\pipename" になる必要があります。

名前付きパイプでの作業の詳細は 「Communicating With MetaTrader 5 Using Named Pipes Without Using DLLs」でみられます。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 不正なファイルオープンメソッド
  string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
  string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";
  int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
  if(filehandle<0)
    {
    Print("Failed to open the file by the absolute path ");
    Print("Error code ",GetLastError());
    }
 
//--- ファイルサンドボックスでの正しい作業の仕方
  ResetLastError();
  filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
  if(filehandle!=INVALID_HANDLE)
    {
    FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
    FileClose(filehandle);
    Print("FileOpen OK");
    }
  else Print("Operation FileOpen failed, error ",GetLastError());
//--- MQL5\Files\で囲まれたディレクトリの作成の例
  string subfolder="Research";
  filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
    if(filehandle!=INVALID_HANDLE)
    {
    FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
    FileClose(filehandle);
    Print("The file must be created in the folder "+terminal_data_path+"\\"+subfolder);
    }
  else Print("File open failed, error ",GetLastError());
 }

参照

コードページの利用FileFindFirstFolderCreateファイルを開く際のフラグ