Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Покажите на примере как записать строку в файл и прочитать его.Файл должен храниться в Корне диска С.Этот должен быть експерт.
Вот код он компилируется,но файлы не создаются,ничего не пишиться и не читается.
//+------------------------------------------------------------------+
//| ExpertsFiles_WinAPI.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
// константы для функции _lopen
#define OF_READ 0
#define OF_WRITE 1
#define OF_READWRITE 2
#define OF_SHARE_COMPAT 3
#define OF_SHARE_DENY_NONE 4
#define OF_SHARE_DENY_READ 5
#define OF_SHARE_DENY_WRITE 6
#define OF_SHARE_EXCLUSIVE 7
#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
// _lopen : Откpывает указанный файл. Возвpащает: описатель файла.
// _lcreat : Создает указанный файл. Возвpащает: описатель файла.
// _llseek : Устанавливает указатель в откpытом файле. Возвpащает:
// новое смещение указателя.
// _lread : Считывает из откpытого файла указанное число байт.
// Возвpащает: число считанных байт; 0 - если конец файла.
// _lwrite : Записывает данные из буфеpа в указанный файл. Возвpащает:
// число записанных байт.
// _lclose : Закpывает указанный файл. Возвpащает: 0.
// В случае неуспешного завеpшения все функции возвращают значение
// HFILE_ERROR=-1.
// path : Стpока, опpеделяющая путь и имя файла.
// of : Способ открытия.
// attrib : 0 - чтение или запись; 1 - только чтение; 2 - невидимый или
// 3 - системный.
// handle : Файловый описатель.
// offset : Число байт, на котоpое пеpемещается указатель.
// origin : Указывает начальную точку и напpавление пеpемещения: 0 -
// впеpед от начала; 1 - с текущей позиции; 2 - назад от конца файла.
// buffer : Пpинимающий/записываемый буфеp.
// bytes : Число считываемых байт.
// Способы открытия (параметр of):
// int OF_READ =0; // Открыть файл только для чтения
// int OF_WRITE =1; // Открыть файл только для записи
// int OF_READWRITE =2; // Открыть файл в режиме запись/чтение
// int OF_SHARE_COMPAT =3; // Открывает файл в режиме общего
// совместного доступа. В этом режиме любой процесс может открыть данный
// файл любое количество раз. При попытке открыть этот файл в любом другом
// режиме, функция возвращает HFILE_ERROR.
// int OF_SHARE_DENY_NONE =4; // Открывает файл в режиме общего доступа
// без запрета на чтение/запись другим процессам. При попытке открытия
// данного файла в режиме OF_SHARE_COMPAT, функция возвращает HFILE_ERROR.
// int OF_SHARE_DENY_READ =5; // Открывает файл в режиме общего доступа с
// запретом на чтение другим процессам. При попытке открытия данного файла
// с флагами OF_SHARE_COMPAT и/или OF_READ или OF_READWRITE, функция
// возвращает HFILE_ERROR.
// int OF_SHARE_DENY_WRITE=6; // Тоже самое, только с запретом на запись.
// int OF_SHARE_EXCLUSIVE =7; // Запрет текущему и другим процессам на
// доступ к этому файлу в режимах чтения/записи. Файл в этом режиме можно
// открыть только один раз (текущим процессом). Все остальные попытки
// открытия файла будут провалены.
//+------------------------------------------------------------------+
//| прочитать файл и вернуть строку с содержимым |
//+------------------------------------------------------------------+
string ReadFile (string path)
{
int handle=_lopen (path,OF_READ);
if(handle<0)
{
Print("Ошибка открытия файла ",path);
return ("");
}
int result=_llseek (handle,0,0);
if(result<0)
{
Print("Ошибка установки указателя" );
return ("");
}
string buffer="";
string char1="x";
int count=0;
result=_lread (handle,char1,1);
while(result>0)
{
buffer=buffer+char1;
char1="x";
count++;
result=_lread (handle,char1,1);
}
result=_lclose (handle);
if(result<0)
Print("Ошибка закрытия файла ",path);
return (buffer);
}
//+------------------------------------------------------------------+
//| записать содержимое буфера по указанному пути |
//+------------------------------------------------------------------+
void WriteFile (string path, string buffer)
{
int count=StringLen (buffer);
int result;
int handle=_lopen (path,OF_WRITE);
if(handle<0)
{
handle=_lcreat (path,0);
if(handle<0)
{
Print ("Ошибка создания файла ",path);
return;
}
result=_lclose (handle);
}
handle=_lopen (path,OF_WRITE);
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);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int c1= _lcreat ("C:\\Text.txt", 0);
int c2= _lcreat ("C:\\Text2.txt", 0);
WriteFile("C:\\Text2.txt","Запись в файл");
string buffer=ReadFile("C:\\Text.txt");
int count=StringLen(buffer);
Alert("Прочитано байт:",count);
WriteFile("C:\\Text2.txt",buffer);
//----
}
//+------------------------------------------------------------------+