FileTell

이 파일은 열린 파일의 현재 파일 포인터 위치를 반환합니다.

ulong  FileTell(
   int  file_handle    // 파일 핸들
   );

Parameters

file_handle

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

반환 값

파일 설명자의 현재 위치(바이트 단위).

참고

오류에 대한 더 많은 정보에 대해선, GetLastError()을 호출하십시오.

예:

//+------------------------------------------------------------------+
//|                                                Demo_FileTell.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"
//--- 스크립트를 시작할 때 입력 매개 변수 창을 표시합니다
#property script_show_inputs
//--- 입력 매개 변수
input string InpFileName="file.txt";    // 파일명
input string InpDirectoryName="Data";   // 디렉토리명
input int    InpEncodingType=FILE_ANSI// ANSI=32 또는 UNICODE=64
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 난수 생성을 위한 변수 값 지정
   _RandomSeed=GetTickCount();
//--- 문자열의 시작점 위치에 대한 변수
   ulong pos[];
   int   size;
//--- 에러값 리셋
   ResetLastError();
//--- 파일 열기
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s 파일을 읽을 수 있습니다",InpFileName);
      //--- 파일의 각 문자열에 대한 시작 위치 수신
      GetStringPositions(file_handle,pos);
      //--- 파일의 문자열 수 정의
      size=ArraySize(pos);
      if(!size)
        {
         //--- 파일에 문자열이 없으면 중지
         PrintFormat("%s 파일이 비었습니다!",InpFileName);
         FileClose(file_handle);
         return;
        }
      //--- 문자열 수를 무작위로 고름
      int ind=MathRand()%size;
      //--- 위치를 문자열의 시작점으로 이동
      FileSeek(file_handle,pos[ind],SEEK_SET);
      //--- ind 숫자로 문자열을 읽고 인쇄합니다.
      PrintFormat("String text with %d number: \"%s\"",ind,FileReadString(file_handle));
      //--- 파일 닫기
      FileClose(file_handle);
      PrintFormat("%s 파일이 닫혔습니다",InpFileName);
     }
   else
      PrintFormat("%s 파일 열기 실패, 에러 코드 = %d",InpFileName,GetLastError());
  }
//+-------------------------------------------------------------------------------+
//| 함수는 파일의 각 문자열에 대한 시작 지점을 정의하고  |
//| 배열에 배치합니다                                                      |
//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {
//--- 디폴트 배열 사이즈
   int def_size=127;
//--- 배열용 메모리 할당
   ArrayResize(arr,def_size);
//--- 스트링 카운터
   int i=0;
//--- 파일의 끝이 아니라면 문자열이 하나 이상 있습니다
   if(!FileIsEnding(handle))
     {
      arr[i]=FileTell(handle);
      i++;
     }
   else
      return// 파일이 비었습니다, exit
//--- 인코딩에 따른 바이트 이동 정의
   int shift;
   if(FileGetInteger(handle,FILE_IS_ANSI))
      shift=1;
   else
      shift=2;
//--- 루프에서 문자열을 통과
   while(1)
     {
      //--- string 읽기
      FileReadString(handle);
      //--- 파일의 끝 점검
      if(!FileIsEnding(handle))
        {
         //--- 다음 문자열의 위치를 저장
         arr[i]=FileTell(handle)+shift;
         i++;
         //--- 오버플로인 경우 어레이의 크기를 증가
         if(i==def_size)
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break// 파일의 끝, exit
     }
//--- 배열의 실제 사이즈 정의
   ArrayResize(arr,i);
  }