FileWriteArray

이 함수는 문자열을 제외한 모든 유형의 어레이를 BIN 파일에 씁니다(스트링 또는 동적 어레이가 포함되지 않은 구조의 어레이일 수 있음).

uint  FileWriteArray(
   int          file_handle,         // 파일 핸들
   const void&  array[],             // 배열
   int          start=0,             // 배열의 시작 인덱스
   int          count=WHOLE_ARRAY    // 요소 수
   );

Parameters

file_handle

[in] FileOpen()에서 반환된 파일 설명자.

array[]

[out] 기록용 배열.

start=0

[in]  어레이의 초기 인덱스(첫 번째로 기록된 요소의 수).

count=WHOLE_ARRAY

[in]  쓸 항목 수 (WHOLE_ARRAY는 숫자로 시작하는 모든 항목이 배열이 끝날 때까지 기록됨을 의미합니다).

반환 값

기록된 항목 수.

참고

문자열 배열을 TXT 파일에 기록할 수 있습니다. 이 경우 문자열은 줄 끝 문자 "\r\n"에 의해 자동으로 끝납니다. 파일 형식 ANSI 또는 UNICODE에 따라 문자열이 ANSI 인코딩으로 변환되거나 변환되지 않습니다.

예:

//+------------------------------------------------------------------+
//|                                          Demo_FileWriteArray.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- 입력 매개 변수
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| 가격 데이터 저장 구조                                 |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // 날짜
   double            bid;  // 입찰가
   double            ask;  // 요청가
  };
//--- 글로벌 변수
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Expert 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 배열용 메모리 할당
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert 초기화 해제 함수                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 카운트가 n보다 작을 경우 남은 카운트를 씁니다
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Expert 틱 함수                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 배열에 데이터 저장
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- 현재 데이터를 보여줌
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- 카운터 증가
   count++;
//--- 배열이 가득 찬 경우 파일에 데이터를 기록한 후 0으로 설정합니다
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| 파일에 배열의 요소 기록                            |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- 파일 열기
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- 파일 끝에 어레이 데이터를 씁니다
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- 파일 닫기
      FileClose(handle);
     }
   else
      Print("파일 오픈 실패, 오류 ",GetLastError());
  }

더 보기

Variables, FileSeek