FileOpen

A função abre o arquivo com o nome e a bandeira especificada.

int  FileOpen(
   string  file_name,           // Nome do arquivo
   int     open_flags,          // Combinação de bandeiras
   short   delimiter='\t',      // Delimitador
   uint    codepage=CP_ACP      // Página de código
   );

Parâmetros

file_name

[in]  O nome do arquivo pode conter sub-pastas. Se o arquivo é aberto para escrita, estas sub-pastas serão criadas se elas não existirem.

open_flags

[in] combinação de bandeiras que determinam o modo de operação para o arquivo. As bandeiras são definidas das seguintes formas:
FILE_READ arquivo é aberto para leitura
FILE_WRITE arquivo é aberto para a escrita
FILE_BIN modo binário de leitura e escrita(sem conversão de uma string e para uma string)
FILE_CSV arquivo do tipo csv (todos os itens registrados são convertidos para as strings de tipo unicode ou ansi, e são separados por um delimitador)
FILE_TXT um arquivo de texto simples (o mesmo que csv, mas o delimitador não é levado em conta)
FILE_ANSI linhas do tipo ANSI (símbolos de um byte)
FILE_UNICODE linhas do tipo UNICODE (caracteres de bytes duplos)
FILE_SHARE_READ leitura partilhada entre vários programas
FILE_SHARE_WRITE escrita partilhada entre vários programas
FILE_COMMON localização do arquivo em uma pasta compartilhada para todos os terminais de cliente \Terminal\Common\Files.

delimiter='\t'

[in]  valor a ser usado como um separador em txt ou csv-file. Se o arquivo .csv delimitador não for especificado, o padrão é uma tabulação. Se o arquivo .txt delimitador não for especificado, então nenhum separador é usado. Se o separador está claramente definido para 0, então nenhum separador é usado.

codepage=CP_ACP

[in]  O valor do código de página. Para os mais usados códigos de página forneça as constantes apropriadas.

Valor do Retorno

Se um arquivo foi aberto com sucesso, a função retorna o manipulador de arquivo, que é então usado para acessar os dados do arquivo. Em caso de falha retorna INVALID_HANDLE.

Observação

Por razões de segurança, o trabalho com arquivos é estritamente controlada na língua MQL5. Arquivos com que as operações de arquivo são conduzidas usando os meios MQL5, não podem estar fora da caixa de proteção do arquivo.

Se o arquivo precisar ser lido em uma codificação específica (o parâmetro codepage é especificado com o valor da página de códigos), deverá ser definido o sinalizador FILE_ANSI. Se o sinalizador FILE_ANSI não for especificado, o arquivo de texto será lido em Unicode, sem nenhuma conversão.

O arquivo é aberto na pasta do terminal do cliente na subpasta MQL5\files (ou testing_agent_directory\MQL5\files em caso de testes). Se FILE_COMMON é especificado entre bandeiras, o arquivo é aberto em uma pasta compartilhada para todos os MetaTrader 5 terminais de cliente.

"Pipes nomeados" pode ser aberta de acordo com as seguintes regras:

  • Nome do pipe é uma string, que deve ter o seguinte aspecto: "\\servername\pipe\pipeName", onde servername - nome do servidor na rede, enquanto pipename é um nome de tubo. Se os tubos são utilizados no mesmo computador, o nome do servidor pode ser omitido, mas num ponto devem ser inseridos em vez do mesmo: "\\.\pipe\pipename". Um cliente tenta conectar o tubo deve saber o seu nome.
  • FileFlush() e FileSeek() deve ser chamado para o início de um arquivo entre as operações seqüenciais de leitura do tubo e gravá-lo.

Um símbolo '\' especial é usado em strings expostas. Portanto, '\' deve ser redobrada quando se escreve um nome na aplicação MQL5. Isso significa que o exemplo acima deve ter o seguinte aspecto no código: "\\\\servername\\pipe\\pipename".

Mais informações sobre como trabalhar com pipes nomeados pode ser encontrada no artigo "Communicating With MetaTrader 5 Using Named Pipes Without Using DLLs".

Exemplo:

//+------------------------------------------------------------------+
//| Programa Script da funзгo start (iniciar)                        |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- mйtodo de abertura de arquivo incorreto
   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("Falha para abrir o arquivo pelo caminho absoluto ");
      Print("Cуdigo de erro ",GetLastError());
     }
//--- maneira correta de trabalhar no "sandbox arquivo"
   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("Operaзгo FileOpen falhou, erro ",GetLastError());
//--- outro exemplo com a criaзгo de um diretуrio fechado em 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("O arquivo serб criado na pasta "+terminal_data_path+"\\"+subfolder);
     }
   else Print("Falha ao abrir arquivo, erro ",GetLastError());
  }

Também Veja

Utilização de uma página de código (Codepage), FileFindFirst, FolderCreate, Bandeiras de abertura de arquivos