Как записать строку в файл и прочитать

 

Покажите на примере как записать строку в файл и прочитать его.Файл должен храниться в Корне диска С.Этот должен быть експерт.

Вот код он компилируется,но файлы не создаются,ничего не пишиться и не читается.

 

//+------------------------------------------------------------------+

//|                                          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);   

//----

   

  }

//+------------------------------------------------------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций