FileWriteStruct

Bu fonksiyon, parametre olarak geçirilmiş bir yapının içeriğini, dosya işaretçisinin mevcut konumundan itibaren bir bin-dosyasına yazar

uint  FileWriteStruct(
   int          file_handle,       // Dosya tanıtıcı değeri
   const void&  struct_object,     // bir nesneye yapılan referans
   int          size=-1            // bayt bazında, yazılacak büyüklük
   );

Parametreler

file_handle

[in] FileOpen() fonksiyonunun dönüş yaptığı dosya tanımlayıcısı.

struct_object

[in] Yapı nesnesine yapılan referans. Bu yapı, dizgiler, dinamik diziler veya sanal fonksiyonlar içermemelidir.

size=-1

[in] Yazılacak bayt sayısı. Boyut belirtilmemişse veya belirtilen değer yapının boyutunu aşıyorsa, söz konusu yapının boyutu kullanılır.

Dönüş değeri

Başarılı sonuç durumunda, yazılan bayt sayısına dönüş yapılır ve dosya işaretçisi, eşit sayıda bayt ile kaydırılır.

Örnek:

//+------------------------------------------------------------------+
//|                                          Demo_FileWiteStruct.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"
//--- script çalıştığında giriş parametrelerinin penceresini göster
#property script_show_inputs
//--- terminalden veri alımı için parametreler
input string          InpSymbolName="EURUSD";           // döviz çifti
input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1;        // zaman aralığı
input datetime        InpDateStart=D'2013.01.01 00:00'; // veri kopyalamanın başlangıç tarihi
//--- verinin dosyaya yazılması için gereken parametreler
input string          InpFileName="EURUSD.txt";         // dosya ismi
input string          InpDirectoryName="Data";          // dizin ismi
//+------------------------------------------------------------------+
//| Mum verilerini depolamak için bir yapı                           |
//+------------------------------------------------------------------+
struct candlesticks
  {
   double            open;  // açılış fiyatı
   double            close; // kapanış fiyatı
   double            high;  // yüksek fiyat
   double            low;   // düşük fiyat
   datetime          date;  // tarih
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime     date_finish=TimeCurrent();
   int          size;
   datetime     time_buff[];
   double       open_buff[];
   double       close_buff[];
   double       high_buff[];
   double       low_buff[];
   candlesticks cand_buff[];
//--- hata değerini sıfırla
   ResetLastError();
//--- çubukların açılış zamanı değerlerini kopyala
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("Zaman değerleri kopyalanamadı. Hata kodu = %d",GetLastError());
      return;
     }
//--- çubukların yüksek fiyatlarını al
   if(CopyHigh(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,high_buff)==-1)
     {
      PrintFormat("High (yüksek) fiyat değerleri kopyalanamadı. Hata kodu = %d",GetLastError());
      return;
     }
//--- çubukların düşük fiyatlarını al
   if(CopyLow(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,low_buff)==-1)
     {
      PrintFormat("Low (düşük) fiyat değerleri kopyalanamadı. Hata kodu = %d",GetLastError());
      return;
     }
//--- çubukların açılış fiyatı değerlerini al
   if(CopyOpen(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,open_buff)==-1)
     {
      PrintFormat("Open (açılış) fiyatı değerleri alınamadı. Hata kodu = %d",GetLastError());
      return;
     }
//--- çubukların kapanış fiyatı değerlerini al
   if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
     {
      PrintFormat("Close (kapanış) fiyatı değerleri alınamadı. Hata kodu = %d",GetLastError());
      return;
     }
//--- dizilerin boyutlarını tanımla
   size=ArraySize(time_buff);
//--- yapı dizisindeki tüm veriyi kaydet
   ArrayResize(cand_buff,size);
   for(int i=0;i<size;i++)
     {
      cand_buff[i].open=open_buff[i];
      cand_buff[i].close=close_buff[i];
      cand_buff[i].high=high_buff[i];
      cand_buff[i].low=low_buff[i];
      cand_buff[i].date=time_buff[i];
     }
 
//--- yapı dizisinin yazılacağı dosyayı aç (dosya mevcut değilse, otomatik olarak oluşturulacak)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s dosyası, yazma amacıyla açıldı",InpFileName);
      PrintFormat("Dosya adresi: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
      //--- bayt sayısı için sayacı hazırla
      uint counter=0;
      //--- dizi değerlerini döngüye yaz
      for(int i=0;i<size;i++)
         counter+=FileWriteStruct(file_handle,cand_buff[i]);
      PrintFormat("%d baytlık bilgi, %s dosyasına yazıldı",InpFileName,counter);
      PrintFormat("Toplam bayt sayısı: %d * %d * %d = %d, %s",size,5,8,size*5*8,size*5*8==counter ? "Doğru" : "Hata");
      //--- dosyayı kapat
      FileClose(file_handle);
      PrintFormat("Veri yazıldı, %s dosyası kapatıldı",InpFileName);
     }
   else
      PrintFormat("%s dosyası açılamadı, Hata kodu = %d",InpFileName,GetLastError());
  }

Ayrıca Bakınız

Yapılar ve sınıflar