FileOpen

Bu fonksiyon, belirtilen isme ve bayrağa sahip olan dosyayı açar.

int  FileOpen(
   string  file_name,           // Dosya ismi
   int     open_flags,          // Bayrak kombinasyonu
   short   delimiter='\t',      // Ayırıcı
   uint    codepage=CP_ACP      // Kod sayfası
   );

Parametreler

file_name

[in]  Dosya ismi alt klasörleri içerebilir. Eğer dosya yazma amacıyla açılmışsa, bu alt klasörler mevcut değillerse oluşturulurlar.

open_flags

[in] bayrak kombinasyonu, dosya için kullanılacak işlem modunu belirtir. Bayraklar aşağıdaki gibi tanımlanır:
FILE_READ dosya okuma amacıyla açılır
FILE_WRITE dosya yazma amacıyla açılır
FILE_BIN ikili okuma-yazma modu (dizgi dönüşümü yoktur)
FILE_CSV csv tipi dosya (kaydedilen şeyler, unicode veya ansi tipi dizgilere dönüştürülür, ve bir ayırıcı ile ayrılır)
FILE_TXT basit metin dosyasıdır (csv tipine benzer ama ayırıcı hesaba katılmaz)
FILE_ANSI ANSI tipi satırlar (tek baytlık semboller halinde)
FILE_UNICODE UNICODE tipi satırlar (iki baytlık karakterler)
FILE_SHARE_READ birkaç programdan paylaşımlı okuma
FILE_SHARE_WRITE birkaç program ile paylaşımlı yazma
FILE_COMMON tüm terminallerin ortak klasöründeki dosyanın konumu \Terminal\Common\Files

delimiter='\t'

[in]  txt veya csv dosyasında ayırıcı alarak kullanılacak değer. csv dosyasının ayırıcısı belirtilmemişse, varsayılan olarak sekme kullanılır. txt dosyasının ayırıcısı belirtilmemişse, ayırıcı kullanılmaz. Ayırıcı açıkça 0 olarak ayarlanmışsa, yine ayırıcı kullanılmaz.

codepage=CP_ACP

[in]  Kod sayfasının değeri. Uygun sabitleri sağlayan, en çok kullanılan kod sayfaları için.

Dönüş değeri

Eğer dosya başarılı şekilde açılmışsa, fonksiyon tanıtıcı değere dönüş yapar, bu da daha sonra dosya verilerine erişmek için kullanılır. Başarısızlık durumunda INVALID_HANDLE değerine dönüş yapar.

Not

Dosya işlemleri, MQL5 dili içerisinde güvenlik amacıyla sıkı şekilde kontrol edilmektedir. İşlemleri, MQL5 araçları ile yürütülen dosyalar, dosya güvenlik-ortamı (sandbox) dışında yer alamaz.

Dosya belirli bir kodlamayla okunacaksa FILE_ANSI bayrağını ayarladığınızdan emin olun (kod sayfası parametresi ilebir kod sayfası değeri belirtilir). Belirtilen FILE_ANSI bayrağı yoksa, metin dosyası hiç dönüşüm olmadan Unicode'da okunur.

Dosya, müşteri terminali klasörünün MQL5\files alt-klasöründe açılır (veya sınama durumunda sınama_birimi_dizini\MQL5\files klasöründe). FILE_COMMON, bayraklar arasında belirtilmişse, dosya tüm MetaTrader 5 müşteri terminallerinin ortak klasöründe açılır.

"Adlandırılmış kanallar" şu kurallara göre açılabilir:

  • Kanal (pipe) ismi bir dizgidir ve şu şekle sahip olmalıdır "\\servername\pipe\pipename", burada "servername" ağdaki sunucunun ismi, "pipename" ise kanalın ismidir. Kanallar aynı bilgisayar üzerinde kullanılıyorsa, sunucu ismi atlanabilir ve bunun yerine bir nokta kullanılır: "\\.\pipe\pipename". Kanala bağlanmaya çalışan müşteri, kanalın ismini bilmelidir.
  • FileFlush() ve FileSeek() fonksiyonları, kanaldan veya kanala yapılacak ardışık okuma veya yazma işlemlerinin arasında çağrılmalıdır.

Gösterilen dizgilerde '\' özel sembolü kullanılır. Bu yüzden bir MQL5 uygulaması içinde bir isim yazarken, '\' sembolü çift olarak kullanılmalıdır. Yani yukarıdaki örnek, kod içerisinde şu görünüme sahip olmalıdır: "\\\\servername\\pipe\\pipename".

Adlandırılmış kanallarla çalışma hakkında daha fazla bilgi, "DLL'ler kullanmadan Named Pipes kullanarak Metatrader 5 ile iletişim kurma" isimli makalede bulunabilir.

Örnek:

//+------------------------------------------------------------------+
//| Script programı başlatma fonksiyonu                              |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- hatalı dosya açma yöntemi
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";
   int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
   if(filehandle<0)
     {
      Print("Salt adres kullanılarak dosya aзma işlemi başarısız oldu ");
      Print("Hata kodu ",GetLastError());
     }
 
//--- "dosya güvenlik ortamında" çalışmanın doğru şekli
   ResetLastError();
   filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
      FileClose(filehandle);
      Print("FileOpen OK");
     }
   else Print("FileOpen işlemi başarısız oldu, hata ",GetLastError());
//--- MQL5\Files\ dizinine iliştirilmiş bir klasör oluşturulması için başka bir örnek
   string subfolder="Research";
   filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
      if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
      FileClose(filehandle);
      Print("Dosya şu klasörde oluşturulmalı "+terminal_data_path+"\\"+subfolder);
     }
   else Print("Dosya açma başarısız, hata ",GetLastError());
  }

Ayrıca Bakınız

Bir Kod Sayfasının Kullanımı, FileFindFirst, FolderCreate, Dosya açma bayrakları