FileOpen

La funzione apre il file con il nome e flag specificati.

int  FileOpen(
   string  file_name,           // Nome del File
   int     open_flags,          // Combinazione dei flags
   short   delimiter='\t',      // Delimitatore
   uint    codepage=CP_ACP      // Codice della Pagina
   );

Parametri

file_name

[in]  Il nome del file può contenere sottocartelle. Se il file è aperto per la scrittura, queste sottocartelle verranno create se non ce ne sono.

open_flags

[in] la combinazione di flags determina la modalità di operazione per il file. I flags sono definiti come segue:
FILE_READ il file è aperto per la lettura
FILE_WRITE il file è aperto per la scrittura
FILE_BIN modalità lettura-scrittura binaria (nessuna conversione da string e per string)
FILE_CSV file di tipo csv (tutti gli elementi registrati vengono convertiti in tipo unicode o ansi, e vengono separati da un delimitatore)
FILE_TXT un semplice file di testo (lo stesso del csv, ma un delimitatore non viene preso in considerazione)
FILE_ANSI righe di tipo ANSI (simboli a singolo-byte)
FILE_UNICODE righe di tipo UNICODE (caratteri a doppio-byte)
FILE_SHARE_READ lettura condivisa da diversi programmi
FILE_SHARE_WRITE scrittura condivisa da diversi programmi
FILE_COMMON locazione nel file in una cartella condivisa per tutti i terminali client \Terminal\Common\Files

delimitatore='\t

[in]  valore che deve essere usato come un separatore nel file txt o cvs. Se il delimitatore del file csv non viene specificato, il suo default è tab. Se il delimitatore del file txt non viene specificato, allora non viene usato nessun separatore. Se il separatore non è chiaramente impostato a 0, allora non viene usato nessun separatore.

codepage=CP_ACP

[in]  Il valore del codice pagina. Per i codici pagina più usati, provvedere appropriate costanti.

Valore restituito

Se un file è stato aperto con successo, la funzione restituisce l'handle file, che è quindi usato per accedere ai dati del file. In caso di fallimento restituisce INVALID_HANDLE.

Nota

Per motivi di sicurezza, il lavoro con i file è strettamente controllato nel linguaggio MQL5. I file con cui sono condotte le operazioni di file utilizzando i mezzi MQL5, non possono esservi al di fuori della sandbox del file.

Assicurarsi di impostare il flag FILE_ANSI se il file deve essere letto in una codifica specifica (il parametro codepage con il valore una pagina di codice è specificato). Se non esiste alcun flag FILE_ANSI specificato, il file di testo viene letto in Unicode senza alcuna conversione.

Il file è aperto nella cartella del terminale client, nella sottocartella MQL5\files (o testing_agent_directory\MQL5\files in caso di testing). Se FILE_COMMON viene specificato tra i flags, il file viene aperto ina una cartella condivisa per tutti i terminali client MetaTrader 5.

Le "Named pipes" possono essere aperte secondo le seguenti regole:

  • Il nome della Pipe è una stringa, che dovrebbe avere il seguente aspetto: "\\servername\pipe\pipename", dove nomeserver - nome del server nella rete, mentre pipeName è un nome di pipe. Se vengono usate le pipes sullo stesso computer, il nome del server può essere omesso ma un punto dev'essere inserito al posto di esso"\\.\pipe\pipename". Un client che cerca di collegasi al pipe dovrebbe conoscere il suo nome.
  • FileFlush() e FileSeek() dovrebbero essere chiamate all'inizio di un file tra operazioni sequenziali di lettura della pipe e scrittura ad essa.

Un simbolo speciale '\' viene utilizzato nelle stringhe mostrate. Pertanto, '\' dovrebbe essere raddoppiata quando si scrive un nome in un'applicazione MQL5. Ciò significa che l'esempio di cui sopra dovrebbe avere il seguente aspetto nel codice: "\\\\servername\\pipe\\pipename".

Ulteriori informazioni su come lavorare con le named pipes possono essere trovate nell'articolo "Comunicare con MetaTrader 5 tramite Named Pipe senza utilizzare DLL".

Esempio:

//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script                                         |
//+--------------------------------------------------------------------------------+
voidOnStart()
  {
//--- metodo scorretto di apertura file
   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("Fallimento nell'apertura del file per percorso assoluto ");
      Print("Error code ",GetLastError());
     }
//--- modalitа corretta di lavoro con la "file sandbox"
   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("Operation FileOpen failed, error ",GetLastError());
//--- altro esempio con la creazione di una directory racchiusa in MQL5\Files\
   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("The file most be created in the folder "+terminal_data_path+"\\"+subfolder);
     }
   else Print("Apertura file fallita, errore ",GetLastError());
  }

Vedi anche

Uso di un Codepage, FileFindFirst, FolderCreate, Flags di apertura file