FileOpen

이 함수는 지정된 이름과 플래그를 가진 파일을 엽니다.

int  FileOpen(
   string  file_name,           // 파일명
   int     open_flags,          // 플래그 조합
   short   delimiter='\t',      // 구분기호
   uint    codepage=CP_ACP      // 코드 페이지
   );

Parameters

file_name

[in]  파일 이름에는 하위 폴더가 포함될 수 있음. 파일을 쓰기 위해 연 경우 이러한 하위 폴더가 없으면 하위 폴더가 생성됩니다.

open_flags

[in] 파일의 작동 모드를 결정하는 플래그 조합. 플래그는 다음과 같이 정의됩니다:
FILE_READ 파일은 읽기를 위해 열립니다
FILE_WRITE 파일은 쓰기를 위해 열립니다
FILE_BIN 이진 읽기-쓰기 모드 (문자열에서 문자열로의 변환 없음)
csv 형식의 FILE_CSV 파일(기록된 모든 항목은 UNICODE 또는 ANSI 형식의 문자열로 변환되며 구분 기호로 구분됨)
FILE_TXT 단순 텍스트 파일(csv와 동일하지만 구분 기호는 고려되지 않음)
ANSI 유형의 FILE_ANSI 라인(싱글바이트 기호)
UNICODE 유형의 FILE_UNICODE 줄(더블바이트 문자)
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가 지정된 경우 파일은 모든 MetaTrader 5 클라이언트 터미널의 공유 폴더에 열립니다.

명명된 파이프는 다음 규칙에 따라 열 수 있습니다:

  • 파이프 이름은 다음과 같은 모습을 가져야 하는 문자열입니다: "\\servername\pipe\pipename", 여기서 servername은 네트워크 서버 이름이고 pipename은 파이프 이름입니다. 파이프가 동일한 시스템에서 사용되는 경우 서버 이름을 생략할 수 있지만 포인트 대신 "\\.\pipe\pipename"을 삽입해야 합니다. 파이프를 연결하려는 클라이언트는 파이프 이름을 알고 있어야 합니다.
  • FileFlush()FileSeek()는 파이프에서 읽고 쓰는 순차 작업 사이에 파일 시작 부분에 호출되어야 합니다.

특수 기호 '\'는 표시된 문자열에 사용됩니다. 따라서 MQL5 애플리케이션에서 이름을 쓸 때는 '\'를 두번씩 사용해야 합니다. 이는 위의 예제가 코드에서 "\\\\servername\\pipe\\pipename"으로 표시되어야 함을 의미합니다.

명명된 파이프로 작업하는 방법에 대한 자세한 내용은 "DLL을 사용하지 않고 명명된 파이프를 사용하여 MetaTrader 5와 통신" 문서를 참조하십시오.

예:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
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("절대 경로로 파일을 열지 못했습니다. ");
      Print("오류 코드 ",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("FileOpen 작업 실패, 오류 ",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("파일은 다음 폴더에 생성해야 합니다"+terminal_data_path+"\\"+subfolder);
     }
   else Print("파일 열기 실패, 에러 ",GetLastError());
  }

더 보기

Use of a Codepage, FileFindFirst, FolderCreate, File opening flags