Yeni bir satırda bir dosyaya yazma - sayfa 6

 
Aleksei Stepanenko:
Orada, Sergey'in birkaç Uzman Danışmanı var, birkaç satır var, bu yüzden dizi. Ve bu yüzden her şey çirkin görünüyor. Maxim Kuznetsov SQL'i önerdi, bu Uzman Danışmanların birbirleriyle iletişim kurmaları için doğru olan şey bu.

Ama satırlar birer birer okunur ve istenilen satır bir şekilde seçilir. Ve sonra diziye gerek kalmayacak.

Bundan da bahsettim ama mql4 SQLite'ı desteklemiyor

 

Kütüphaneyi ekledim mi? Ya da burada değil, çoktan unuttum.

 
Aleksei Stepanenko :

Kütüphaneyi ekledim mi? Ya da burada değil, çoktan unuttum.

Dosyanın daha sonra kaydedilen sürümünün kaydedilmesi nedeniyle dosyanın ortak eşzamanlı düzenlenmesi mümkün değil gibi görünüyor.

Örneğin, A programı dosyayı düzenlemek için açtı , aynı zamanda B programı da aynısını yaptı, sonra A programı değişiklikler yaptı ve FileClose kullanarak kaydetti, ardından B programı aynısını yaptı, ancak dosya C programı tarafından açıldığında, dosya, A programı tarafından yapılan değişiklikleri değil, sadece B programı tarafından uygulanan ve yazılan değişiklikleri içerecektir, çünkü B programı A programından daha sonra bir kayıt yapmıştır.

Ama tam olarak öyle değil.

Bu konuda herhangi bir bilgi var mı?

 
En kötü şey, programların tek dosyayla eşzamanlı çalışmasıdır. Bir dosyayla çalışırken, EA, bu dosyayı diğer EA'lar tarafından okuma/yazma yasağını kontrol etmelidir. SQL veya bayrak- genel değişken veya bayrak dosyası kullanın. Aksi takdirde, tespit edilmesi zor olan anlaşılmaz hatalar olacaktır.
 
Aleksei Stepanenko :
En kötü şey, programların tek dosyayla eşzamanlı çalışmasıdır. Bir dosyayla çalışırken, EA, bu dosyayı diğer EA'lar tarafından okuma/yazma yasağını kontrol etmelidir. SQL veya bayrak- genel değişken veya bayrak dosyası kullanın. Aksi takdirde, tespit edilmesi zor olan anlaşılmaz hatalar olacaktır.

Bu o kadar da kötü bir şey değil, farklı görevler var, sadece belirli özellikleri hesaba katmak gerekiyor.

Görünüşe göre, değişiklikler tam olarak FileClose anında kaydedilir ve o zamana kadar kimse onlardan şüphelenmez.

 
Sen karar ver. İnsan beyni öyle düzenlenmiştir ki, yeni fikirler onda güçlükle kök salmaktadır.
 
EfremovSergey :

Dosyanın daha sonra kaydedilen sürümünün kaydedilmesi nedeniyle dosyanın ortak eşzamanlı düzenlenmesi mümkün değil gibi görünüyor.

Örneğin, A programı dosyayı düzenlemek için açtı , aynı zamanda B programı da aynısını yaptı, sonra A programı değişiklikler yaptı ve FileClose kullanarak kaydetti, ardından B programı aynısını yaptı, ancak dosya C programı tarafından açıldığında, dosya, A programı tarafından yapılan değişiklikleri değil, sadece B programı tarafından uygulanan ve yazılan değişiklikleri içerecektir, çünkü B programı A programından daha sonra bir kayıt yapmıştır.

Ama tam olarak öyle değil.

Bu konuda herhangi bir bilgi var mı?

Kurulumu zor ama imkansız değil. Açılırken aynı saat ile son değişikliğin zamanını kaydetmeden önce kontrol etmeniz yeterlidir. Yani FILE_MODIFY_DATE okuyoruz, sonra dosyayı açıyoruz, değişiklik yapıyoruz, FILE_MODIFY_DATE tekrar okuyoruz, bir öncekiyle karşılaştırıyoruz ve hiç kimse herhangi bir değişiklik yapmadıysa, değişikliklerimizi kaydederken dosyayı kapatıyoruz. Aksi takdirde, değişiklikleri iptal ederiz ... ve açılışı tekrar ederiz. Aşağı yukarı böyle.

 
EfremovSergey :

Bu o kadar da kötü bir şey değil, farklı görevler var, ancak sadece belirli özellikleri hesaba katmak gerekiyor.

Görünüşe göre, değişikliklerin kaydedilmesi tam olarak FileClose anında gerçekleşir ve o zamana kadar kimse onlardan şüphelenmez.

bir gerçek değil.

FileFlush

G/Ç dosya arabelleğinde kalan tüm verileri diske boşaltın.

 void    FileFlush ( 
   int   file_handle       // handle файла 
   );
 
Alexey Viktorov :

Kurulumu zor ama imkansız değil. Açılırken aynı saat ile son değişikliğin zamanını kaydetmeden önce kontrol etmeniz yeterlidir. Yani FILE_MODIFY_DATE okuyoruz, sonra dosyayı açıyoruz, değişiklik yapıyoruz, FILE_MODIFY_DATE tekrar okuyoruz, bir öncekiyle karşılaştırıyoruz ve hiç kimse herhangi bir değişiklik yapmadıysa, değişikliklerimizi kaydederken dosyayı kapatıyoruz. Aksi takdirde, değişiklikleri iptal ederiz ... ve açılışı tekrar ederiz. Aşağı yukarı böyle.

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.

 
Alexey Viktorov :

bir gerçek değil.

FileFlush

G/Ç dosya arabelleğinde kalan tüm verileri diske boşaltın.

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