forked from rosh/MQL5Book
47 lines
1.9 KiB
MQL5
47 lines
1.9 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| FileHandle.mq5 |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#define FILE_DEBUG_PRINT
| |
| |
#include "..\..\Include\MqlError.mqh"
| |
#include "..\..\Include\FileHandle.mqh"
| |
#include "..\..\Include\PRTF.mqh"
| |
| |
// NB: we will open the same file twice in this script
| |
// just for demonstration purpose;
| |
// normally you need only one handle for a file per program instance
| |
| |
const string dummy = "MQL5Book/dummy";
| |
| |
//+------------------------------------------------------------------+
| |
//| Script program start function |
| |
//+------------------------------------------------------------------+
| |
void OnStart()
| |
{
| |
// create new file or open existing one and empty it
| |
FileHandle fh1(PRTF(FileOpen(dummy, FILE_TXT | FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ))); // 1
| |
// another possible use case
| |
int h = PRTF(FileOpen(dummy, FILE_TXT | FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ)); // 2
| |
FileHandle fh2 = h;
| |
// one more supported syntax:
| |
// int f;
| |
// FileHandle ff(f, FileOpen(dummy, FILE_TXT|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ));
| |
| |
// some data writing could be here
| |
// ...
| |
| |
FileClose(~fh1); // explicit close will be detected and gracefully skipped in FileHandle
| |
| |
// Note: handle h, stored in fh2 is not closed
| |
// and will be closed automatically in destructor
| |
| |
/*
| |
output:
| |
| |
FileHandle::~FileHandle: Automatic close for handle: 2
| |
FileHandle::~FileHandle: handle 1 is incorrect, INVALID_FILEHANDLE(5007)
| |
*/
| |
}
| |
//+------------------------------------------------------------------+
|