파일 작업. - 페이지 2

 
mql5 :
MQL의 문자열은 유니코드(문자당 2바이트)인 반면, kernel32.dll 함수는 산성(문자당 1바이트)입니다. 바이트 배열을 사용하고 원시 함수를 호출하는 StringToCharArray 함수
어때요?
내가 기억하는 한 Windows는 거의 완전히 유니코드이며 오랫동안 ...

아니면 kernel32 .dll이 예외입니까?

------추가됨------

나는 정말로 si, 이상하게 보였다 ...

 

아마추어에게 말하십시오. Word 사용자 수준에서 파일 작업에 대한 지식.

Expert Advisor의 전체 작업 시간 동안 파일의 시작 부분까지 매번 날짜/시간 유형의 값 하나를 덮어써야 합니다. Expert Advisor가 다시 로드된 경우에만 마지막으로 기록된 값을 읽습니다. .csv 파일을 사용하여 간단한 디자인을 스케치했습니다. 모든 것이 제대로 작동하는 것 같습니다. 다음과 같은 질문이 나타났습니다.

1) 쓰기 절차의 실행 시간을 최소화하기 위해 날짜/시간 값을 저장하는 데 사용하는 가장 좋은 파일 형식은 무엇입니까? 내가 알기로는 .csv 파일은 문자열과 함께 작동하며 문자열이 있는 곳에서는 문자열을 처리하는 데 추가 시간이 소요됩니다.

2) FileClose() 함수를 올바르게 사용하는 방법: 새 값을 쓴 후 매번 파일을 닫거나 OnDeinit() 함수에서 파일을 한 번 닫습니까? 파일을 한 번 연 다음 여러 번 열고 닫는 데 시간을 낭비하지 않고 새 값만 쓰고 싶습니다. 하지만 그렇게 하면 위험하지 않습니까?

3) 파일에 어떤 값을 써놓고 파일을 닫지 않고 갑자기 전원을 끄면 이 쓰여진 값이 아무데도 가지 않고 프로그램이 로드될 때 나중에 읽어?

 

Yedelkin :

다음과 같은 질문이 나타났습니다.

1) 쓰기 절차의 실행 시간을 최소화하기 위해 날짜/시간 값을 저장하는 데 사용하는 가장 좋은 파일 형식은 무엇입니까? 내가 알기로는 .csv 파일은 문자열과 함께 작동하며 문자열이 있는 곳에서는 문자열을 처리하는 데 추가 시간이 소요됩니다.

2) FileClose() 함수를 올바르게 사용하는 방법: 새 값을 쓴 후 매번 파일을 닫거나 OnDeinit() 함수에서 파일을 한 번 닫습니까? 파일을 한 번 연 다음 여러 번 열고 닫는 데 시간을 낭비하지 않고 새 값만 쓰고 싶습니다. 하지만 그렇게 하면 위험하지 않습니까?

3) 파일에 어떤 값을 써놓고 파일을 닫지 않고 갑자기 전원을 끄면 이 쓰여진 값이 아무데도 가지 않고 프로그램이 로드될 때 나중에 읽어?

1. 저장할 형식에 따라 다릅니다. 날짜는 숫자, 텍스트 또는 특수 날짜/시간 유형으로 저장할 수 있습니다.

두 번째 질문은 이것입니다. 파일에 쓰는 이유는 무엇이며 누가 어떻게 볼 수 있습니까?

TXT에 쓰는 것은 아마도 가장 쉽고 안정적인 옵션일 것입니다(모든 프로그램 또는 거의 모든 프로그램에서 읽을 수 있음). CSV는 . 장점도 있지만 단점도 있습니다.

2. OnInit 또는 기본 클래스의 생성자(구현에 따라 다름)에서 한 번 열고 OnDeinit 또는 소멸자에서 닫는 것을 선호합니다.

그러나 파일을 다시 열거나 다시 열어야 하는 경우(이러한 작업에는 여러 가지 이유가 있음) 주기적으로(시간당 한 번/일/주) 이 작업을 수행할 수 있습니다.

파일이 크거나 그 안의 정보를 복구하기 어려운 경우 주기적으로 덮어쓰거나 새로 만드는 것이 좋습니다.

3. 값이 기록되었지만 파일이 제대로 닫히지 않은 경우(갑작스러운 정전 또는 소프트웨어 정지) 데이터가 손실될 가능성이 높습니다(부분적으로 또는 완전히 별도의 문제).

델파이로 작성된 프로그램에서 일반 txt로 기록을 실험했던 기억이 납니다. 그래서 거기에서 문제가 발생하면 마지막 기록이 종종 깨지거나 누락되었습니다.

 

마지막 파일 수정 시간을 반환하는 mql 함수를 갖고 싶습니다.

 datetime FileLastModificationTime( string FName);
 
MetaDriver :

마지막 파일 수정 시간을 반환하는 mql 함수를 갖고 싶습니다.

 datetime FileLastModificationTime( string FName); 
일반적으로 - 시인의 꿈!
 
Interesting :

1. 날짜는 숫자, 텍스트 또는 특수 날짜/시간 유형으로 저장할 수 있습니다.

여기에서 날짜를 날짜/시간 유형 으로 저장하는 함수를 찾지 못했습니다. 배열을 통해서만 가능합니다.

어떤 이유로 날짜 시간 값을 바이너리 파일에 저장하는 것이 더 최적일 것 같습니다(파일 자체는 재부팅 시 동일한 Expert Advisor가 읽기 전용으로 사용하도록 되어 있음). 실험해 보겠습니다.

흥미로운 :

3. 값이 기록되었지만 파일이 제대로 닫히지 않은 경우(갑작스러운 정전 또는 소프트웨어 정지) 데이터가 손실될 가능성이 높습니다(부분적으로 또는 완전히 별도의 문제).

델파이로 작성된 프로그램에서 일반 txt로 기록을 실험했던 기억이 납니다. 그래서 거기에서 문제가 발생하면 마지막 기록이 종종 깨지거나 누락되었습니다.

슬프게도. 마지막으로 기록된 값을 보장하려면 항상 FileClose() 함수 를 사용하십시오.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
Yedelkin :

슬프게도. 마지막으로 기록된 값을 보장하려면 항상 FileClose() 함수 를 사용하십시오.

이를 위해 FileFlush() 가 발명되었습니다.
 

sergeev :

예델킨 :

슬프게도. 마지막으로 기록된 값을 보장하려면 항상 FileClose() 함수 를 사용하십시오.

이를 위해 FileFlush()가 발명되었습니다.

아마도. 사용 방법(어떤 경우에 적용해야 하는지)만 - 아무 말도 없습니다. 전문가들에게는 쉬운 질문일 수도 있지만 개인적으로 설명서를 읽은 후 FileFlush()에서 특별한 의미를 찾지 못했습니다 ...

그리고 FileClose()와 FileFlush()의 차이점은 여전히 불분명합니다 :/

파일플러시

I/O 파일 버퍼에 남아 있는 모든 데이터를 디스크로 플러시합니다.

... FileFlush() 함수 는 파일 읽기와 파일 쓰기 작업 사이에 호출되어야 합니다.

이것은 아직 파일에 쓰지 않았지만 데이터가 이미 어딘가에 "디스크에 덤프"되어 있는 것입니다.

 
Yedelkin :

아마도. 사용 방법(어떤 경우에 적용해야 하는지)만 - 아무 말도 없습니다. 전문가들에게는 쉬운 질문일 수도 있지만 개인적으로 설명서를 읽은 후 FileFlush()에서 특별한 의미를 찾지 못했습니다 ...

그리고 FileClose()와 FileFlush()의 차이점은 여전히 불분명합니다 :/

이것은 아직 파일에 쓰지 않았지만 데이터가 이미 어딘가에 "디스크에 덤프"되어 있는 것입니다.

다음은 MQL4 도움말의 예와 함께 더 자세한 설명입니다.

무효 FileFlush ( int 핸들)


I/O 파일 버퍼에 남아 있는 모든 데이터를 디스크로 플러시합니다.

참고: FileFlush() 함수는 파일 읽기와 파일 쓰기 사이에 호출되어야 합니다.
파일을 닫으면 데이터가 디스크에 자동으로 플러시되므로 FileClose() 함수를 호출하기 전에 FileFlush() 함수를 호출할 필요가 없습니다.
옵션:
핸들 - FileOpen() 함수에서 반환된 파일 핸들입니다.

예시:

 int bars_count= Bars ;
int handle= FileOpen ( "mydat.csv" , FILE_CSV | FILE_WRITE );
  
   if (handle> 0 )
    {
     FileWrite (handle, "#" , "OPEN" , "CLOSE" , "HIGH" , "LOW" );
     for ( int i= 0 ;i<bars_count;i++)
       FileWrite (handle, i+ 1 ,Open[i],Close[i],High[i], Low[i]);
     FileFlush (handle);
     ...
     for ( int i= 0 ;i<bars_count;i++)
       FileWrite (handle, i+ 1 ,Open[i],Close[i],High[i], Low[i]);
     FileClose (handle);
    }

모든 것을 올바르게 이해했다면 FileClose와 달리 FileFlush 호출은 파일을 닫지 않으므로 파일 작업을 계속할 수 있습니다. 예, 재개방과 비교할 때 속도가 크게 향상되어야 합니다.

여기에서는 작업에 대한 보다 구체적인 예가 필요합니다.

FileFlush - Документация на MQL4
  • docs.mql4.com
FileFlush - Документация на MQL4
 
Interesting :

다음은 MQL4 도움말의 예와 함께 더 자세한 설명입니다.

"파일이 닫히면 데이터가 자동으로 디스크에 플러시되므로 FileClose() 함수를 호출하기 전에 FileFlush() 함수를 호출할 필요가 없습니다." - 예, sergeev 가 말하는 내용을 이해하기 시작했습니다. FileClose() 대신 파일의 마지막 레코드 보존을 보장하기 위해 FileFlush()를 호출합니까? 그리고 그것이 현명한 결정이 될까요?
사유: