새 줄에 파일 쓰기 - 페이지 7

 
EfremovSergey :

이것은 "바쁜"플래그 (먼저 일어난 사람이 슬리퍼를 얻음)와 거의 같지만 훨씬 더 어렵지만 아이디어는 흥미롭고 좋아했습니다. 감사합니다.

FILE_SHARE_WRITE의 공동 편집을 제공하지 않고 누군가 FILE_READ를 읽기 전용으로 열도록 하고 누군가가 FILE_READ|FILE_WRITE 읽기 및 쓰기를 열도록 하면 오류를 수신하고 파일을 다시 열지 않는 것이 더 쉬울 것입니다. 아마도 더 쉬울 것입니다.

 
EfremovSergey :

FileClose로 저장하는 맥락에서 이것이 무엇을 의미하는지 정말로 이해하지 못했습니다.

, 파일이 닫힐 때뿐 아니라 변경 사항이 디스크에 저장됩니다.

 
string     sep= ";" ;                                                   // знак разделителя
ushort     usep= StringGetCharacter (sep, 0 );                           // код знака разделителя
string     arr[];                                                     // массив данных для открытия ордера
int        h= 0 ;                                                       // handle_1
int        h1= 0 ;                                                     // handle_2

int OnInit ()
  
  {

   EventSetMillisecondTimer ( 3000 );

   return ( INIT_SUCCEEDED );
  }

void OnDeinit ( const int reason)

  {
   EventKillTimer ();
  }

void OnTimer ()

  {

   h= FileOpen ( "Copy.txt" , FILE_READ | FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_TXT | FILE_COMMON , ";" );   // open файл

   FileSeek (h, 0 , SEEK_SET );                       // перевод курсора в начало файла

   while ( FileIsEnding (h)== false )               // построчное чтение до конца файла

     {

       string     s= FileReadString (h);                                     // чтение строки

       StringSplit (s,usep,arr);                                         // перенос подстрок в массив

       // открытие ордера с данными из массива

       OrderSend (arr[ 0 ],StrToInteger(arr[ 1 ]),StrToDouble(arr[ 2 ]),StrToDouble(arr[ 3 ]), 100 , 0 , 0 );

       if ( FileIsEnding (h)== false )                                   // промежуточная проверка

         continue ;                                               // возврат в начало по условию if

      h1= FileOpen ( "Copy.txt" , FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT | FILE_COMMON , ";" );   // очистка файла

       FileClose (h1);                                                   // закрытие handle_2

     }

   FileClose (h);                                                     // закрытие handle_1

   Comment ( "\n H: " , h, "\n H1: " , h1);                             // вывод хэнделов на экран

  }

읽기 측면에서 플래그 배열이 있어 모든 데이터를 추출한 후 파일을 닫지 않고 내용을 지울 수 있습니다.

그리고 녹음 측면에서 다른 Expert Advisor가 이미 파일을 연 경우 파일을 열 수 없도록 하는 플래그의 배열입니다.

 //--- Открываем файл

       int h1= FileOpen ( "Copy.txt" , FILE_READ | FILE_WRITE | FILE_TXT | FILE_COMMON , ";" );

       FileSeek (h1, 0 , SEEK_END );

       FileWrite (h1, Symbol (),OP_BUYSTOP,OrderLots()*Koof,OrderStopLoss(),Slippage, 0 , 0 , IntegerToString (OrderTicket()));

       FileClose (h1);
 
// закрываем файл

이 코드는 예시일 뿐이며 핸들과 티켓 등을 처리하기 위한 검사 기능이 충분하지 않지만 이미 필요한 결과에 충분히 가깝습니다.

좋은 정보와 조언을 주신 모든 분들께 다시 한 번 감사드립니다.