ZI_File_Functions_Full_String_Value_Lib 0-81024





//+------------------------------------------------------------------------------------------------------------------+
//|                                                               ZI_File_Functions_Full_String_Value_Lib 0-81024.mq4|
//|                                                               Copyright © Zhunko                                 |
//|                                                               ZHUNKO vadim@zhunko.ru                             |
//|24.10.2008                                                     Ilnur  X-79@yandex.ru                              |
//+------------------------------------------------------------------------------------------------------------------+
//|                                Îïåðàöèè äëÿ áèíàðíîãî ôàéëà ñòðîêîâûõ äàííûõ.                                    |
//+------------------------------------------------------------------------------------------------------------------+
//| 1. Ôóíêöèÿ "Îïåðàöèè äëÿ áèíàðíîãî ôàéëà ñòðîêîâûõ äàííûõ".                                                      |
//| 2. Ôóíêöèÿ çàïèñûâàåò öåëîå ÷èñëî â äâîè÷íûé ôàéë.                                                               |
//| 3. Ôóíêöèÿ ÷èòàåò öåëîå ÷èñëî èç òåêóùåé ïîçèöèè áèíàðíîãî ôàéëà.                                                |
//| 4. Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå îïèñàíèå êîäà ñèñòåìíîé îøèáêè.                                                  |
//+------------------------------------------------------------------------------------------------------------------+

#property copyright "Copyright © 2008 Zhunko, Ilnur"
#property link      "vadim@zhunko.ru ; X-79@yandex.ru"
#property library
// Èìïîðòèðóåìûå ôóíêöèè.
#import "kernel32.dll"
 bool ReadFile (int hFile, string& lpBuffer, int nNumberOfBytesToRead, int& lpNumberOfBytesRead[], int lpOverlapped);
 bool WriteFile (int hFile, string lpBuffer, int nNumberOfBytesToWrite, int& lpNumberOfBytesWritten[], int lpOverlapped);
#import "ntdll.dll"
 int  RtlGetLastWin32Error();
 int  RtlSetLastWin32Error (int dwErrCode);
#import
#include <WinKernel32.mqh> // Çàãîëîâî÷íûé ôàéë áèáëèîòåêè "kernel32.dll" ôóíêöèé API Windows XP.
//=================================================================================================================================================================================
// 1. Ôóíêöèÿ "Îïåðàöèè äëÿ áèíàðíîãî ôàéëà ñòðîêîâûõ äàííûõ".=====================================================================================================================
// Âîçâpàùàåò ÷èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.  ñëó÷àå íåóñïåøíîãî çàâåpøåíèÿ ôóíêöèÿ âîçâðàùàåò "-1".
int FileOperationsStringValue (string  PathName, // Íàçâàíèå ôàéëà.
                               string& Value,    // Ïåðåìåííàÿ äëÿ çàïèñè èëè ÷òåíèÿ.
                               int     ModeCWR,  // Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì: 0 - FILE_CREATE_  ñîçäàòü èëè ïåðåïèñàòü ôàéë;
                                                 //                                     1 - FILE_WRITE_   äîïèñàòü ôàéë;
                                                 //                                     2 - FILE_READ_    ÷èòàòü ôàéë.
                               int     Size,     // Äëèíà çàïèñûâàåìîé èëè ÷èòàåìîé ñòðîêè.
                               int     Offset,   // Ñìåùåíèå â áàéòàõ ôàéëîâîãî óêàçàòåëÿ.
                               int     Origin)   // Íà÷àëüíîå ïîëîæåíèå ôàéëîâîãî óêàçàòåëÿ: SEEK_CUR - îò òåêóùåãî ïîëîæåíèÿ,
                                                 //                                          SEEK_SET - îò íà÷àëà,
                                                 //                                          SEEK_END - îò êîíöà ôàéëà).
 {
  int Error;  // Íîìåð ïîñëåäíåé îøèáêè.
  int Handle; // Ñèñòåìíûé äåñêðèïòîð ôàéëà.
  int i;
  //----
  int ArOutputByte[1]; // Áóôåð äëÿ âîçâðàòà ÷èñëà çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.
  //----
  RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
  switch (ModeCWR)
   {
    case 0: Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); break; // Ñîçäà¸ì ôàéë.
    case 1: Handle = CreateFileA (PathName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break; // Äîïèñûâàåì ôàéë.
    case 2: Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break;   // ×èòàåì ôàéë.
    default: Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì ñ ïóò¸ì \"", PathName, "\" âûáðàí íå âåðíî. ModeCWR = ", ModeCWR); return (-1);
   }
  if (Handle == -1) // Åñëè ôàéë íå îòêðûò.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  if (SetFilePointer (Handle, Offset, NULL, Origin) == -1) // Åñëè ôàéë îòêðûò, ñäâèãàåì ôàéëîâûé óêàçàòåëü, êóäà òðåáóåòñÿ.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Ôàéëîâûé óêàçàòåëü ôàéëà ñ ïóò¸ì \"", PathName, "\" íå ñìåù¸í. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
    if (CloseHandle (Handle) == false)
     {
      Error = RtlGetLastWin32Error();
      Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
     }
    return (-1);
   }
  switch (ModeCWR)
   {
    case 0: // Çàïèñûâàåì èëè äîïèñûâàåì â ôàéë âõîäíîå çíà÷åíèå.
    case 1: // Çàïèñûâàåì èëè äîïèñûâàåì â ôàéë âõîäíîå çíà÷åíèå.
     {
      if (WriteFile (Handle, Value, Size, ArOutputByte, NULL) == false)
       {
        Error = RtlGetLastWin32Error();
        Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
       }
      break;
     }
    case 2: // ×èòàåì èç ôàéëà çíà÷åíèå.
     {
      Value = ""; // Èíèöèàëèçèðóåì áóôåð.
      for (i = 0; i < Size; i++) Value = Value + " "; // Íà âñÿêèé ñëó÷àé îðãàíèçóåì êîëè÷åñòâî çíàêîâ ðàâíûì çàäàííîìó êîëè÷åñòâó çíàêîâ äëÿ ÷òåíèÿ.
      if (ReadFile (Handle, Value, Size, ArOutputByte, NULL) == false)
       {
        Error = RtlGetLastWin32Error();
        Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
       }
      break;
     }
   }
  if (CloseHandle (Handle) == false) // Çàêðûâàåì ôàéë.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsStringValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  return (ArOutputByte[0]);
 }
//=================================================================================================================================================================================
// 2. Ôóíêöèÿ çàïèñûâàåò ñòðîêó â äâîè÷íûé ôàéë ñ òåêóùåé ïîçèöèè.=================================================================================================================
// Âîçâðàùàåò ôàêòè÷åñêè çàïèñàííîå ÷èñëî áàéò èëè îòðèöàòåëüíîå çíà÷åíèå â ñëó÷àå îøèáêè.
int FileWriteStringFull (int    Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
                         string Value,  // Çàïèñûâàåìàÿ ñòðîêà.
                         int    Size)   // Äëèíà çàïèñûâàåìîé ñòðîêè.
 {
  int Error;             // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  int ArOutputByte[1];   // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.
  //----
  RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
  if (WriteFile (Handle, Value, Size, ArOutputByte, NULL) == false)
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileWriteStringFull()\". Ñòðîêà â ôàéë íå çàïèñàíà. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  else return (ArOutputByte[0]);
 }
//=================================================================================================================================================================================
// 3. Ôóíêöèÿ ÷èòàåò ñòðîêó ñ òåêóùåé ïîçèöèè ôàéëà.===============================================================================================================================
string FileReadStringFull (int Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
                           int Length) // Êîëè÷åñòâî ñèìâîëîâ äëÿ ÷òåíèÿ.
 {
  int    Error;  // Íîìåð ïîñëåäíåé îøèáêè.
  string String; // ×èòàåìàÿ ñòðîêà.
  //----
  int ArOutputByte[1]; // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.
  //----
  RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
  if (ReadFile (Handle, String, Length, ArOutputByte, NULL) == false)
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileReadStringFull()\". Ñòðîêà èç ôàéëà íå ïðî÷èòàíà. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return ("ERROR");
   }
  else return (String);
 }
//=================================================================================================================================================================================
// 4. Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå îïèñàíèå êîäà ñèñòåìíîé îøèáêè.=================================================================================================================
string StringError (int ErrorCode)
 {
  int    i;
  string String = "";
  //----
  int    Buffer[128];
  //----
  ArrayInitialize (Buffer, 0);
  FormatMessageA (0x1000, 0, ErrorCode, 0, Buffer, ArraySize (Buffer), 0);
  //----
  for (i = 0; i < ArraySize (Buffer); i++)
   {
    String = String + CharToStr (Buffer[i]       & 0xFF)
                    + CharToStr (Buffer[i] >>  8 & 0xFF)
                    + CharToStr (Buffer[i] >> 16 & 0xFF)
                    + CharToStr (Buffer[i] >> 24 & 0xFF);
   }
  return (StringTrimRight (String) + ".");
 }
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:
kernel32
ntdll

Order Management characteristics:

Other Features: