Trabalhar com ficheiros.

 

Tem havido dificuldades com:

#import "kernel32.dll"
int _lopen(string path,int of);
int _lcreat(string path,int attrib);
int _llseek(int handle,int offset,int origin);
int _lread(int handle,string buffer,int bytes);
int _lwrite(int handle,string buffer,int bytes);
int _lclose(int handle);

#import
Nomeadamente tentar escrever um ficheiro, mas sem erros, muito menos ficheiros:
void WriteFile(string path,string buffer)
  {
   int count=StringLen(buffer);
   int result;
   int handle=_lopen(path,2);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(handle<0)
     {
      handle=_lcreat(path,0);
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      if(handle<0)
        {
         Print("Ошибка создания файла ",path);
         return;
        }
      result=_lclose(handle);
     }
   handle=_lopen(path,2);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(handle<0)
     {
      Print("Ошибка открытия файла ",path);
      return;
     }
   result=_llseek(handle,0,0);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(result<0)
     {
      Print("Ошибка установки указателя");
      return;
     }
   result=_lwrite(handle,buffer,count);
   if(result<0)
      Print("Ошибка записи в файл ",path," ",count," байт");
   result=_lclose(handle);
   if(result<0)
      Print("Ошибка закрытия файла ",path);
  }
 
Tenho um problema com a função FileOpen() padrão que abre um ficheiro, ela continua a dar um erro ao abrir o ficheiro
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
sergey1294:
Tenho um problema com a função FileOpen() padrão, ela continua a dar-me um erro de ficheiro aberto

O meu tópico é muito relevante, não posso de forma alguma escrever um ficheiro para um directório não normalizado, silêncio completo.
 
Vladon:
O meu tópico é muito relevante, não consigo escrever um ficheiro num directório não-padrão, o silêncio é completo.
As cordas em MQL são unicode (2 bytes por caracter), e as funções do kernel32.dll são ansish (1 byte por caracter). Utilizar a matriz de bytes e função StringToCharArray para chamar funções unicode
 
sergey1294:
Tenho um problema com a função FileOpen() padrão que abre um ficheiro, continuo a receber um erro de ficheiro aberto

Por favor contacte o Service Desk com o código para reproduzir o erro
 

Aqui eu escrevi um código de teste para trabalhar com a função padrão de abrir arquivo , ele retorna um erro o tempo todo. Gostaria de ouvir os comentários dos desenvolvedores.

 //+------------------------------------------------------------------+
//|                                                запись в файл.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"

input int         Magic= 1000008 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   Print ( "Открываем файл " , "Фаил_" +( string )Magic+ "_" + _Symbol + ".csv" );
   int handle= FileOpen ( "Фаил_" +( string )Magic+ "_" + _Symbol + ".csv" , FILE_CSV | FILE_READ , ';' );
   Print ( "handle = " ,handle);
   if (handle< 0 )
     {
       Print ( "Ошибка № - " , GetLastError (), " открытия файла" );
     }
   else
     {
       Print ( "Закрываем данные в файл" );
       uint byte= FileWrite (handle, "Проверка записи в файл" );
       Print ( "функция FileWrite() вернула " ,byte, " байт" );
       Print ( "Закрываем файл" );
       FileClose (handle);
       Print ( "Файл закрыт" );
     }
  }
//+------------------------------------------------------------------+

Entrada de registro

CL       0        запись в файл (EURUSD,M5)       10 : 54 : 32         Открываем файл Фаил_1000008_EURUSD.csv
PK       0        запись в файл (EURUSD,M5)       10 : 54 : 32         handle = - 1
LL       0        запись в файл (EURUSD,M5)       10 : 54 : 32         Ошибка № - 5004 открытия файла
RE       0        запись в файл (EURUSD,M5)       10 : 54 : 33         Открываем файл Фаил_1000008_EURUSD.csv
ER       0        запись в файл (EURUSD,M5)       10 : 54 : 33         handle = - 1
EF       0        запись в файл (EURUSD,M5)       10 : 54 : 33         Ошибка № - 5004 открытия файла
DO       0        запись в файл (EURUSD,M5)       10 : 54 : 37         Открываем файл Фаил_1000008_EURUSD.csv
OD       0        запись в файл (EURUSD,M5)       10 : 54 : 37         handle = - 1
CP       0        запись в файл (EURUSD,M5)       10 : 54 : 37         Ошибка № - 5004 открытия файла
HI       0        запись в файл (EURUSD,M5)       10 : 54 : 42         Открываем файл Фаил_1000008_EURUSD.csv
KN       0        запись в файл (EURUSD,M5)       10 : 54 : 42         handle = - 1
KI       0        запись в файл (EURUSD,M5)       10 : 54 : 42         Ошибка № - 5004 открытия файла
RR       0        запись в файл (EURUSD,M5)       10 : 54 : 42         Открываем файл Фаил_1000008_EURUSD.csv
EQ       0        запись в файл (EURUSD,M5)       10 : 54 : 42         handle = - 1
IS       0        запись в файл (EURUSD,M5)       10 : 54 : 42         Ошибка № - 5004 открытия файла
CL       0        запись в файл (EURUSD,M5)       10 : 54 : 43         Открываем файл Фаил_1000008_EURUSD.csv
PK       0        запись в файл (EURUSD,M5)       10 : 54 : 43         handle = - 1
PL       0        запись в файл (EURUSD,M5)       10 : 54 : 43         Ошибка № - 5004 открытия файла
PE       0        запись в файл (EURUSD,M5)       10 : 54 : 44         Открываем файл Фаил_1000008_EURUSD.csv
CR       0        запись в файл (EURUSD,M5)       10 : 54 : 44         handle = - 1
OF       0        запись в файл (EURUSD,M5)       10 : 54 : 44         Ошибка № - 5004 открытия файла
MO       0        запись в файл (EURUSD,M5)       10 : 54 : 45         Открываем файл Фаил_1000008_EURUSD.csv
JD       0        запись в файл (EURUSD,M5)       10 : 54 : 45         handle = - 1
JP       0        запись в файл (EURUSD,M5)       10 : 54 : 45         Ошибка № - 5004 открытия файла
CI       0        запись в файл (EURUSD,M5)       10 : 54 : 45         Открываем файл Фаил_1000008_EURUSD.csv
PN       0        запись в файл (EURUSD,M5)       10 : 54 : 45         handle = - 1
LI       0        запись в файл (EURUSD,M5)       10 : 54 : 45         Ошибка № - 5004 открытия файла
QR       0        запись в файл (EURUSD,M5)       10 : 54 : 45         Открываем файл Фаил_1000008_EURUSD.csv
FQ       0        запись в файл (EURUSD,M5)       10 : 54 : 45         handle = - 1
FS       0        запись в файл (EURUSD,M5)       10 : 54 : 45         Ошибка № - 5004 открытия файла
JL       0        запись в файл (EURUSD,M5)       10 : 54 : 46         Открываем файл Фаил_1000008_EURUSD.csv
MK       0        запись в файл (EURUSD,M5)       10 : 54 : 46         handle = - 1
IM       0        запись в файл (EURUSD,M5)       10 : 54 : 46         Ошибка № - 5004 открытия файла
DF       0        запись в файл (EURUSD,M5)       10 : 54 : 46         Открываем файл Фаил_1000008_EURUSD.csv
OM       0        запись в файл (EURUSD,M5)       10 : 54 : 46         handle = - 1
OF       0        запись в файл (EURUSD,M5)       10 : 54 : 46         Ошибка № - 5004 открытия файла
MO       0        запись в файл (EURUSD,M5)       10 : 54 : 47         Открываем файл Фаил_1000008_EURUSD.csv
JD       0        запись в файл (EURUSD,M5)       10 : 54 : 47         handle = - 1
FP       0        запись в файл (EURUSD,M5)       10 : 54 : 47         Ошибка № - 5004 открытия файла
MI       0        запись в файл (EURUSD,M5)       10 : 54 : 49         Открываем файл Фаил_1000008_EURUSD.csv
JN       0        запись в файл (EURUSD,M5)       10 : 54 : 49         handle = - 1
JI       0        запись в файл (EURUSD,M5)       10 : 54 : 49         Ошибка № - 5004 открытия файла
KR       0        запись в файл (EURUSD,M5)       10 : 54 : 50         Открываем файл Фаил_1000008_EURUSD.csv
HQ       0        запись в файл (EURUSD,M5)       10 : 54 : 50         handle = - 1
LS       0        запись в файл (EURUSD,M5)       10 : 54 : 50         Ошибка № - 5004 открытия файла
QL       0        запись в файл (EURUSD,M5)       10 : 54 : 50         Открываем файл Фаил_1000008_EURUSD.csv
FK       0        запись в файл (EURUSD,M5)       10 : 54 : 50         handle = - 1
FM       0        запись в файл (EURUSD,M5)       10 : 54 : 50         Ошибка № - 5004 открытия файла
HF       0        запись в файл (EURUSD,M5)       10 : 54 : 51         Открываем файл Фаил_1000008_EURUSD.csv
KM       0        запись в файл (EURUSD,M5)       10 : 54 : 51         handle = - 1
OF       0        запись в файл (EURUSD,M5)       10 : 54 : 51         Ошибка № - 5004 открытия файла
NO       0        запись в файл (EURUSD,M5)       10 : 54 : 51         Открываем файл Фаил_1000008_EURUSD.csv
ID       0        запись в файл (EURUSD,M5)       10 : 54 : 51         handle = - 1
IP       0        запись в файл (EURUSD,M5)       10 : 54 : 51         Ошибка № - 5004 открытия файла
EI       0        запись в файл (EURUSD,M5)       10 : 54 : 52         Открываем файл Фаил_1000008_EURUSD.csv
RN       0        запись в файл (EURUSD,M5)       10 : 54 : 52         handle = - 1
FJ       0        запись в файл (EURUSD,M5)       10 : 54 : 52         Ошибка № - 5004 открытия файла
GS       0        запись в файл (EURUSD,M5)       10 : 54 : 52         Открываем файл Фаил_1000008_EURUSD.csv
LP       0        запись в файл (EURUSD,M5)       10 : 54 : 52         handle = - 1
LS       0        запись в файл (EURUSD,M5)       10 : 54 : 52         Ошибка № - 5004 открытия файла
RL       0        запись в файл (EURUSD,M5)       10 : 54 : 53         Открываем файл Фаил_1000008_EURUSD.csv
EK       0        запись в файл (EURUSD,M5)       10 : 54 : 53         handle = - 1
IM       0        запись в файл (EURUSD,M5)       10 : 54 : 53         Ошибка № - 5004 открытия файла
DF       0        запись в файл (EURUSD,M5)       10 : 54 : 53         Открываем файл Фаил_1000008_EURUSD.csv
OM       0        запись в файл (EURUSD,M5)       10 : 54 : 53         handle = - 1
OF       0        запись в файл (EURUSD,M5)       10 : 54 : 53         Ошибка № - 5004 открытия файла
OO       0        запись в файл (EURUSD,M5)       10 : 54 : 54         Открываем файл Фаил_1000008_EURUSD.csv
DD       0        запись в файл (EURUSD,M5)       10 : 54 : 54         handle = - 1
PP       0        запись в файл (EURUSD,M5)       10 : 54 : 54         Ошибка № - 5004 открытия файла
MI       0        запись в файл (EURUSD,M5)       10 : 54 : 54         Открываем файл Фаил_1000008_EURUSD.csv
JN       0        запись в файл (EURUSD,M5)       10 : 54 : 54         handle = - 1
JJ       0        запись в файл (EURUSD,M5)       10 : 54 : 54         Ошибка № - 5004 открытия файла
DS       0        запись в файл (EURUSD,M5)       10 : 54 : 55         Открываем файл Фаил_1000008_EURUSD.csv
OP       0        запись в файл (EURUSD,M5)       10 : 54 : 55         handle = - 1
KS       0        запись в файл (EURUSD,M5)       10 : 54 : 55         Ошибка № - 5004 открытия файла
OL       0        запись в файл (EURUSD,M5)       10 : 54 : 56         Открываем файл Фаил_1000008_EURUSD.csv
DK       0        запись в файл (EURUSD,M5)       10 : 54 : 56         handle = - 1
DM       0        запись в файл (EURUSD,M5)       10 : 54 : 56         Ошибка № - 5004 открытия файла
IF       0        запись в файл (EURUSD,M5)       10 : 54 : 56         Открываем файл Фаил_1000008_EURUSD.csv
NM       0        запись в файл (EURUSD,M5)       10 : 54 : 56         handle = - 1
JG       0        запись в файл (EURUSD,M5)       10 : 54 : 56         Ошибка № - 5004 открытия файла
DP       0        запись в файл (EURUSD,M5)       10 : 54 : 57         Открываем файл Фаил_1000008_EURUSD.csv
OG       0        запись в файл (EURUSD,M5)       10 : 54 : 57         handle = - 1
OP       0        запись в файл (EURUSD,M5)       10 : 54 : 57         Ошибка № - 5004 открытия файла
NI       0        запись в файл (EURUSD,M5)       10 : 54 : 57         Открываем файл Фаил_1000008_EURUSD.csv
IN       0        запись в файл (EURUSD,M5)       10 : 54 : 57         handle = - 1
EJ       0        запись в файл (EURUSD,M5)       10 : 54 : 57         Ошибка № - 5004 открытия файла
MS       0        запись в файл (EURUSD,M5)       10 : 54 : 58         Открываем файл Фаил_1000008_EURUSD.csv
JP       0        запись в файл (EURUSD,M5)       10 : 54 : 58         handle = - 1
JS       0        запись в файл (EURUSD,M5)       10 : 54 : 58         Ошибка № - 5004 открытия файла
CL       0        запись в файл (EURUSD,M5)       10 : 54 : 58         Открываем файл Фаил_1000008_EURUSD.csv
PK       0        запись в файл (EURUSD,M5)       10 : 54 : 58         handle = - 1
DM       0        запись в файл (EURUSD,M5)       10 : 54 : 58         Ошибка № - 5004 открытия файла
JF       0        запись в файл (EURUSD,M5)       10 : 54 : 59         Открываем файл Фаил_1000008_EURUSD.csv
MM       0        запись в файл (EURUSD,M5)       10 : 54 : 59         handle = - 1
MG       0        запись в файл (EURUSD,M5)       10 : 54 : 59         Ошибка № - 5004 открытия файла
PP       0        запись в файл (EURUSD,M5)       10 : 54 : 59         Открываем файл Фаил_1000008_EURUSD.csv
CG       0        запись в файл (EURUSD,M5)       10 : 54 : 59         handle = - 1
GP       0        запись в файл (EURUSD,M5)       10 : 54 : 59         Ошибка № - 5004 открытия файла
QI       0        запись в файл (EURUSD,M5)       10 : 55 : 00         Открываем файл Фаил_1000008_EURUSD.csv
FN       0        запись в файл (EURUSD,M5)       10 : 55 : 00         handle = - 1
FJ       0        запись в файл (EURUSD,M5)       10 : 55 : 00         Ошибка № - 5004 открытия файла
GS       0        запись в файл (EURUSD,M5)       10 : 55 : 00         Открываем файл Фаил_1000008_EURUSD.csv
LP       0        запись в файл (EURUSD,M5)       10 : 55 : 00         handle = - 1
HD       0        запись в файл (EURUSD,M5)       10 : 55 : 00         Ошибка № - 5004 открытия файла
FM       0        запись в файл (EURUSD,M5)       10 : 55 : 01         Открываем файл Фаил_1000008_EURUSD.csv
QJ       0        запись в файл (EURUSD,M5)       10 : 55 : 01         handle = - 1
QM       0        запись в файл (EURUSD,M5)       10 : 55 : 01         Ошибка № - 5004 открытия файла
LF       0        запись в файл (EURUSD,M5)       10 : 55 : 01         Открываем файл Фаил_1000008_EURUSD.csv
GM       0        запись в файл (EURUSD,M5)       10 : 55 : 01         handle = - 1
CG       0        запись в файл (EURUSD,M5)       10 : 55 : 01         Ошибка № - 5004 открытия файла
GP       0        запись в файл (EURUSD,M5)       10 : 55 : 02         Открываем файл Фаил_1000008_EURUSD.csv
LG       0        запись в файл (EURUSD,M5)       10 : 55 : 02         handle = - 1
LP       0        запись в файл (EURUSD,M5)       10 : 55 : 02         Ошибка № - 5004 открытия файла
QI       0        запись в файл (EURUSD,M5)       10 : 55 : 02         Открываем файл Фаил_1000008_EURUSD.csv
FN       0        запись в файл (EURUSD,M5)       10 : 55 : 02         handle = - 1
RJ       0        запись в файл (EURUSD,M5)       10 : 55 : 02         Ошибка № - 5004 открытия файла
LS       0        запись в файл (EURUSD,M5)       10 : 55 : 03         Открываем файл Фаил_1000008_EURUSD.csv
GP       0        запись в файл (EURUSD,M5)       10 : 55 : 03         handle = - 1
GD       0        запись в файл (EURUSD,M5)       10 : 55 : 03         Ошибка № - 5004 открытия файла
FM       0        запись в файл (EURUSD,M5)       10 : 55 : 03         Открываем файл Фаил_1000008_EURUSD.csv
QJ       0        запись в файл (EURUSD,M5)       10 : 55 : 03         handle = - 1
MM       0        запись в файл (EURUSD,M5)       10 : 55 : 03         Ошибка № - 5004 открытия файла
MF       0        запись в файл (EURUSD,M5)       10 : 55 : 04         Открываем файл Фаил_1000008_EURUSD.csv
JM       0        запись в файл (EURUSD,M5)       10 : 55 : 04         handle = - 1
JG       0        запись в файл (EURUSD,M5)       10 : 55 : 04         Ошибка № - 5004 открытия файла
DP       0        запись в файл (EURUSD,M5)       10 : 55 : 05         Открываем файл Фаил_1000008_EURUSD.csv
OG       0        запись в файл (EURUSD,M5)       10 : 55 : 05         handle = - 1
CQ       0        запись в файл (EURUSD,M5)       10 : 55 : 05         Ошибка № - 5004 открытия файла
GJ       0        запись в файл (EURUSD,M5)       10 : 55 : 06         Открываем файл Фаил_1000008_EURUSD.csv
LI       0        запись в файл (EURUSD,M5)       10 : 55 : 06         handle = - 1
LJ       0        запись в файл (EURUSD,M5)       10 : 55 : 06         Ошибка № - 5004 открытия файла
QS       0        запись в файл (EURUSD,M5)       10 : 55 : 06         Открываем файл Фаил_1000008_EURUSD.csv
FP       0        запись в файл (EURUSD,M5)       10 : 55 : 06         handle = - 1
JD       0        запись в файл (EURUSD,M5)       10 : 55 : 06         Ошибка № - 5004 открытия файла
DM       0        запись в файл (EURUSD,M5)       10 : 55 : 07         Открываем файл Фаил_1000008_EURUSD.csv
OJ       0        запись в файл (EURUSD,M5)       10 : 55 : 07         handle = - 1
OM       0        запись в файл (EURUSD,M5)       10 : 55 : 07         Ошибка № - 5004 открытия файла
GF       0        запись в файл (EURUSD,M5)       10 : 55 : 08         Открываем файл Фаил_1000008_EURUSD.csv
LM       0        запись в файл (EURUSD,M5)       10 : 55 : 08         handle = - 1
HG       0        запись в файл (EURUSD,M5)       10 : 55 : 08         Ошибка № - 5004 открытия файла
EP       0        запись в файл (EURUSD,M5)       10 : 55 : 08         Открываем файл Фаил_1000008_EURUSD.csv
RG       0        запись в файл (EURUSD,M5)       10 : 55 : 08         handle = - 1
RQ       0        запись в файл (EURUSD,M5)       10 : 55 : 08         Ошибка № - 5004 открытия файла
LJ       0        запись в файл (EURUSD,M5)       10 : 55 : 09         Открываем файл Фаил_1000008_EURUSD.csv
GI       0        запись в файл (EURUSD,M5)       10 : 55 : 09         handle = - 1
CJ       0        запись в файл (EURUSD,M5)       10 : 55 : 09         Ошибка № - 5004 открытия файла
JS       0        запись в файл (EURUSD,M5)       10 : 55 : 09         Открываем файл Фаил_1000008_EURUSD.csv
MP       0        запись в файл (EURUSD,M5)       10 : 55 : 09         handle = - 1
MD       0        запись в файл (EURUSD,M5)       10 : 55 : 09         Ошибка № - 5004 открытия файла
PM       0        запись в файл (EURUSD,M5)       10 : 55 : 09         Открываем файл Фаил_1000008_EURUSD.csv
CJ       0        запись в файл (EURUSD,M5)       10 : 55 : 09         handle = - 1
ON       0        запись в файл (EURUSD,M5)       10 : 55 : 09         Ошибка № - 5004 открытия файла
FG       0        запись в файл (EURUSD,M5)       10 : 55 : 10         Открываем файл Фаил_1000008_EURUSD.csv
QL       0        запись в файл (EURUSD,M5)       10 : 55 : 10         handle = - 1
QG       0        запись в файл (EURUSD,M5)       10 : 55 : 10         Ошибка № - 5004 открытия файла
LP       0        запись в файл (EURUSD,M5)       10 : 55 : 10         Открываем файл Фаил_1000008_EURUSD.csv
GG       0        запись в файл (EURUSD,M5)       10 : 55 : 10         handle = - 1
CQ       0        запись в файл (EURUSD,M5)       10 : 55 : 10         Ошибка № - 5004 открытия файла
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
sergey1294:

Aqui está um código de teste para trabalhar com a função padrão de abertura de ficheiros, continua a retornar um erro. Gostaria de ouvir os comentários dos criadores.

Entrada de registo



Abrir com a bandeira FILE_READ e tentar escrever nela?
 
mql5:
Abre com a bandeira FILE_READ e tenta escrever para ela?

Devo acrescentar - há uma secção chamada Abrir Bandeiras de Arquivo que diz

Existem algumas peculiaridades de operação ao especificar bandeiras de leitura e escrita:

  • Se FILE_READ for especificado - é feita uma tentativa de abrir um ficheiro já existente. Se o ficheiro não existir, o ficheiro não pode ser aberto, não é criado um novo ficheiro.
  • Se FILE_READ|FILE_WRITE - é criado um novo ficheiro se não houver ficheiro com esse nome.
  • Se FILE_WRITE - o ficheiro é recriado com tamanho zero.

Ao abrir um ficheiro, a bandeira FILE_WRITE deve ser colocada e/ou a bandeira FILE_READ deve ser colocada.

 
mql5:
abrir com a bandeira FILE_READ, e tentar escrever para ela?
Oh meu, eu copiei a linha de escrita lida, desculpa.
 
A função FileOpenHistory padrão será implementada?
 
Urain:
A função FileOpenHistory padrão será implementada?
Não, o histórico é directamente acessível através da função CopyXXX. Já não damos acesso aos ficheiros de história original.