Yeni bir satırda bir dosyaya yazma - sayfa 7

 
EfremovSergey :

Bu, "meşgul" bayrağıyla hemen hemen aynı (ilk ayağa kalkan terlikleri alır), sadece çok daha zor, ama fikir ilginç, beğendim, teşekkürler.

FILE_SHARE_WRITE için ortak düzenleme yapmamak ve birinin FILE_READ salt okunur açmasına izin vermek ve birisinin FILE_READ|FILE_WRITE okuma ve yazmasını açmasına izin vermek, bir hata alacak ve dosyayı yeniden açacaktır. Muhtemelen daha kolay olacak.

 
EfremovSergey :

FileClose ile kaydetme bağlamında bunun ne anlama geldiğini gerçekten anlamadım.

Bu, yalnızca dosya kapatıldığında değil, yapılan değişikliklerin diske kaydedildiği anlamına gelir.

 
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);                             // вывод хэнделов на экран

  }

Okuma tarafında, tüm verileri çıkardıktan sonra dosyayı kapatmadan içeriğini temizlemenize izin veren bayrak düzenine sahibiz.

Ve kayıt tarafında, zaten başka bir Uzman Danışman tarafından açılmış bir dosyanın açılmasına izin vermeyen bayrakların düzenlenmesi.

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

       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);
 
// закрываем файл

Kod sadece bir örnek içindir, tutamaçları ve biletleri ve tüm bunları işlemek için yeterli kontrol işlevi yoktur, ancak ihtiyacım olan sonuca zaten yeterince yakın.

Harika bilgiler ve tavsiyeler için herkese tekrar teşekkürler.