ZI_File_Functions_Full_Main_Lib 0-81024





//+-------------------------------------------------------------------------------+
//|                                    ZI_File_Functions_Full_Main_Lib 0-81024.mq4|
//|                                    Copyright © Zhunko                         |
//|                                    ZHUNKO vadim@zhunko.ru                     |
//|24.10.2008                          Ilnur  X-79@yandex.ru                      |
//+-------------------------------------------------------------------------------+
//|    Îñíîâíûå ôàéëîâûå ôóíêöèè.                                                 |
//+-------------------------------------------------------------------------------+
//| 1. Ôóíêöèÿ îòêðûâàåò èëè ñîçäà¸ò ôàéë.                                        |
//| 2. Ôóíêöèÿ ïåðåìåùåíèÿ ôàéëîâîãî óêàçàòåëÿ.                                   |
//| 3. Ôóíêöèÿ çàêðûòèÿ ôàéëà.                                                    |
//| 4. Ôóíêöèÿ óäàëåíèÿ ôàéëà.                                                    |
//+-------------------------------------------------------------------------------+
//|    Äîïîëíèòåëüíûå ôàéëîâûå ôóíêöèè.                                           |
//+-------------------------------------------------------------------------------+
//| 5. Ôóíêöèÿ ïîëîæåíèÿ ôàéëîâîãî óêàçàòåëÿ â êîíöå ôàéëà.                       |
//| 6. Ôóíêöèÿ ïîëîæåíèÿ ôàéëîâîãî óêàçàòåëÿ.                                     |
//| 7. Ôóíêöèÿ êîïèðîâàíèÿ ôàéëà.                                                 |
//| 8. Ôóíêöèÿ ïåðåìåùåíèÿ ôàéëà.                                                 |
//| 9. Ôóíêöèÿ ñîçäàåò íîâóþ äèðåêòîðèþ.                                          |
//|10. Ôóíêöèÿ óäàëÿåò ñóùåñòâóþùóþ äèðåêòîðèþ.                                   |
//|11. Ôóíêöèÿ âîçâðàùàåò êîä ñèñòåìíîé îøèáêè.                                   |
//|12. Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå îïèñàíèå êîäà ñèñòåìíîé îøèáêè.               |
//+-------------------------------------------------------------------------------+
#property copyright "Copyright © 2008 Zhunko, Ilnur"
#property link      "vadim@zhunko.ru ; X-79@yandex.ru"
#property library
// Èìïîðòèðóåìûå ôóíêöèè.
#import "ntdll.dll"
 int RtlGetLastWin32Error();
 int RtlSetLastWin32Error (int dwErrCode);
#import
#include <WinKernel32.mqh> // Çàãîëîâî÷íûé ôàéë áèáëèîòåêè "kernel32.dll" ôóíêöèé API Windows XP.
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææ Îñíîâíûå ôàéëîâûå ôóíêöèè. æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 1. Ôóíêöèÿ îòêðûâàåò èëè ñîçäà¸ò ôàéë.========================================================================================================================
// Ôóíêöèÿ îòêðûâàåò/ñîçäàåò ôàéë äëÿ ââîäà è/èëè âûâîäà. Åñëè èìÿ ôàéëà ñîäåðæèò íåñóùåñòâóþùóþ äèðåêòîðèþ, òî ôóíêöèÿ âåðíåò îøèáêó. Äëÿ ñîçäàíèÿ äèðåêòîðèè
// èñïîëüçóåòñÿ ôóíêöèÿ "CreateDirectory()". Ôóíêöèÿ âîçâðàùàåò: handle - ôàéëîâûé îïèñàòåëü, åñëè ôóíêöèÿ âûïîëíèëàñü áåç îøèáêè;
//                                                               -1     - âîçíèêëà ñèñòåìíàÿ îøèáêà;
//                                                               -2     - îøèáêà ïðè ïåðåìåùåíèè ôàéëîâîãî óêàçàòåëÿ â êîíåö ôàéëà;
//                                                               -3     - óêàçàí íåäîïóñòèìûé ñïîñîá îòêðûòèÿ ôàéëà.
int FileOpenFull (string PathName, // Èìÿ ôàéëà ñ àáñîëþòíûì ïóò¸ì.
                  int    ModeCWR)  // Ñïîñîá îòêðûòèÿ ôàéëà: 0 - FILE_CREATE_    Îòêðûòèå ôàéëà äëÿ çàïèñè. Åñëè ôàéë ñóùåñòâóåò, òî ñîäåðæèìîå ôàéëà áóäåò
                                   //                                            óíè÷òîæåíî. Åñëè ôàéë ñ òàêèì èìåíåì íå ñóùåñòâóåò, òî áóäåò ñîçäàí íîâûé.
                                   //                        1 - FILE_WRITE_     Äîïèñàòü èëè ïåðåïèñàòü ôàéë. Äàííûå áóäóò èçìåíåíû.
                                   //                        2 - FILE_READ_      Îòêðûòèå ôàéëà äëÿ ÷òåíèÿ. Åñëè ôàéë íå ñóùåñòâóåò, ôóíêöèÿ âåðíåò îøèáêó.
                                   //                        3 - FILE_WRITE_END_ Îòêðûòèå ôàéëà äëÿ ÷òåíèÿ è äîáàâëåíèÿ íîâûõ äàííûõ. Íîâûå äàííûå áóäóò
                                   //                                            çàïèñûâàòüñÿ â êîíåö ôàéëà. Åñëè ôàéë íå ñóùåñòâóåò, ôóíêöèÿ âåðíåò îøèáêó.
 {
  int Error;  // Íîìåð ïîñëåäíåé îøèáêè.
  int Handle; // Ôàéëîâûé îïèñàòåëü.
  //----
  RtlSetLastWin32Error(0);
  switch (ModeCWR)
   {
    case 0: // Ñîçäà¸ì ôàéë.
     {
      Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
      Error = RtlGetLastWin32Error();
      Print ("Îøèáêà â ôóíêöèè \"FileOpenFull()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
      return (Handle);
     }
    case 1: // Äîïèñûâàåì ôàéë.
     {
      Handle = CreateFileA (PathName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
      Error = RtlGetLastWin32Error();
      Print ("Îøèáêà â ôóíêöèè \"FileOpenFull()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
      return (Handle);
     }
    case 2: // ×èòàåì ôàéë.
     {
      Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
      Error = RtlGetLastWin32Error();
      Print ("Îøèáêà â ôóíêöèè \"FileOpenFull()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
      return (Handle);
     }
    case 3: // Äîïèñûâàåì ôàéë â êîíåö.
     {
      Handle = CreateFileA (PathName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
      if (Handle < 0) return (Handle);
      else
       {
        if (SetFilePointer (Handle, 0, 0, SEEK_END) < 0)
         {
          Error = RtlGetLastWin32Error();
          Print ("Îøèáêà â ôóíêöèè \"FileOpenFull()\". Ôàéëîâûé óêàçàòåëü ôàéëà ñ ïóò¸ì \"", PathName, "\" íå ñìåù¸í. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (-2);
         }
        else return (Handle);
       }    
      return (Handle);
     }
    default: Print ("Îøèáêà â ôóíêöèè \"FileOpenFull()\". Óêàçàí íåäîïóñòèìûé ñïîñîá îòêðûòèÿ ôàéëà ñ ïóò¸ì \"", PathName, "\". ModeCWR = ", ModeCWR); return (-3);
   }
 }
//===============================================================================================================================================================
// 2. Ôóíêöèÿ ïåðåìåùåíèÿ ôàéëîâîãî óêàçàòåëÿ.===================================================================================================================
// Ôóíêöèÿ ïåðåìåùàåò ôàéëîâûé óêàçàòåëü íà íîâóþ ïîçèöèþ, êîòîðàÿ ÿâëÿåòñÿ ñìåùåíèåì â áàéòàõ îò íà÷àëà, êîíöà èëè òåêóùåé ïîçèöèè ôàéëà. Ñëåäóþùåå ÷òåíèå èëè
// çàïèñü ïðîèñõîäÿò ñ íîâîé ïîçèöèè. Åñëè ïåðåìåùåíèå ôàéëîâîãî óêàçàòåëÿ ïðîøëî óñïåøíî, íîâîå ïîëîæåíèå ôàéëîâîãî óêàçàòåëÿ, èíà÷å âîçâðàùàåò "-1".
int FileSeekFull (int Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
                  int Offset, // Ñìåùåíèå â áàéòàõ.
                  int Origin) // Íà÷àëüíîå ïîëîæåíèå ôàéëîâîãî óêàçàòåëÿ: SEEK_CUR - îò òåêóùåãî ïîëîæåíèÿ,
                              //                                          SEEK_SET - îò íà÷àëà,
                              //                                          SEEK_END - îò êîíöà ôàéëà.
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  int Offst; // Ñìåùåíèå.
  //----
  RtlSetLastWin32Error (0);
  Offst = SetFilePointer (Handle, Offset, 0, Origin);
  if (Offst < 0)
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileSeekFull()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  else return (Offst);
 }
//===============================================================================================================================================================
// 3. Ôóíêöèÿ çàêðûòèÿ ôàéëà.====================================================================================================================================
// Ôóíêöèÿ çàêðûâàåò ðàíåå îòêðûòûé ôàéë. Åñëè ôàéë çàêðûò óñïåøíî, ôóíêöèÿ âîçâðàùàåò TRUE, èíà÷å âîçâðàùàåò FALSE.
bool FileCloseFull (int Handle) // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  if (!CloseHandle (Handle))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileCloseFull()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else return (true);
 }
//===============================================================================================================================================================
// 4. Ôóíêöèÿ óäàëåíèÿ ôàéëà.====================================================================================================================================
// Ôóíêöèÿ óäàëÿåò ñóùåñòâóþùèé ôàéë. Åñëè ôàéë óäàë¸í óñïåøíî, ôóíêöèÿ âîçâðàùàåò TRUE, èíà÷å âîçâðàùàåò FALSE.
int FileDeleteFull (string PathName) // Ïîëíîå èìÿ óäàëÿåìîãî ôàéëà.
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  if (!DeleteFileA (PathName))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileDeleteFull()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else return (true);
 }
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææ Äîïîëíèòåëüíûå ôàéëîâûå ôóíêöèè. æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 5. Ôóíêöèÿ îáíàðóæåíèÿ ïîëîæåíèÿ ôàéëîâîãî óêàçàòåëÿ â êîíöå ôàéëà.===========================================================================================
// Ôóíêöèÿ âîçâðàùàåò TRUE, åñëè óêàçàòåëü íàõîäèòñÿ â êîíöå ôàéëà, èíà÷å âîçâðàùàåò FALSE.
bool FileIsEndingFull (int Handle) // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  int PositionCurrent = SetFilePointer (Handle, 0, 0, 1);
  int PositionEOF = SetFilePointer (Handle, 0, 0, 2);
  if ((PositionCurrent < 0) || (PositionEOF < 0))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileIsEndingFull()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else
   {
    if (PositionCurrent == PositionEOF) return (true);
    else return (false);
   }
 }
//===============================================================================================================================================================
// 6. Ôóíêöèÿ ïîëîæåíèÿ ôàéëîâîãî óêàçàòåëÿ.=====================================================================================================================
// Ôóíêöèÿ âîçâðàùàåò ñìåùåíèå òåêóùåé ïîçèöèè ôàéëîâîãî óêàçàòåëÿ îò íà÷àëà ôàéëà.
int FileTellFull (int Handle) // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
 {
  int Error;  // Íîìåð ïîñëåäíåé îøèáêè.
  int Offset; // Ñìåùåíèå.
  //----
  RtlSetLastWin32Error (0);
  Offset = SetFilePointer (Handle, 0, 0, 1);
  if (Offset < 0)
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileTellFull()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (Offset);
   }
  else return (Offset);
 }
//===============================================================================================================================================================
// 7. Ôóíêöèÿ êîïèðîâàíèÿ ôàéëà.=================================================================================================================================
// Ôóíêöèÿ êîïèðóåò ôàéë èç îäíîãî óêàçàííîãî ìåñòà â äðóãîå. Åñëè ôàéë ñóùåñòâóåò, òî ôóíêöèÿ ïåðåçàïèñûâàåò åãî. Ñòàðûå äàííûå ïðè ýòîì ÓÍÈ×ÒÎÆÀÞÒÑß.
// Åñëè èìÿ ôàéëà ñîäåðæèò íåñóùåñòâóþùóþ äèðåêòîðèþ, òî ôóíêöèÿ âåðíåò îøèáêó. Äëÿ ñîçäàíèÿ äèðåêòîðèè èñïîëüçóåòñÿ ôóíêöèÿ "CreateDirectory()".
// Åñëè ôàéë ñêîïèðîâàí óñïåøíî, ôóíêöèÿ âîçâðàùàåò TRUE, èíà÷å âîçâðàùàåò FALSE.
bool FileCopy (string ExistingFileName, // Ïîëíîå èìÿ êîïèðóåìîãî ôàéëà.
               string NewFileName)      // Ïîëíûé ïóòü, êóäà áóäåò ñêîïèðîâàí èñõîäíûé ôàéë.
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  if (!CopyFileA (ExistingFileName, NewFileName, false))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileCopy()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else return (true);
 }
//===============================================================================================================================================================
// 8. Ôóíêöèÿ ïåðåìåùåíèÿ ôàéëà.=================================================================================================================================
// Ôóíêöèÿ ïåðåìåùàåò ôàéë èç îäíîãî óêàçàííîãî ìåñòà â äðóãîå. Åñëè ôàéë ñóùåñòâóåò, òî ôóíêöèÿ âåðíåò îøèáêó.
// Åñëè èìÿ ôàéëà ñîäåðæèò íåñóùåñòâóþùóþ äèðåêòîðèþ, òî ôóíêöèÿ âåðíåò îøèáêó. Äëÿ ñîçäàíèÿ äèðåêòîðèè èñïîëüçóåòñÿ ôóíêöèÿ "CreateDirectory()".
// Åñëè ôàéë ïåðåìåù¸í óñïåøíî, ôóíêöèÿ âîçâðàùàåò TRUE, èíà÷å âîçâðàùàåò FALSE.
int FileMove (string ExistingFileName, // Ïîëíîå èìÿ ïåðåìåùàåìîãî ôàéëà.
              string NewFileName)      // Ïîëíûé ïóòü, êóäà áóäåò ïåðåìåù¸í èñõîäíûé ôàéë.
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  if (!MoveFileA (ExistingFileName, NewFileName))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileMove()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else return (true);
 }
//===============================================================================================================================================================
// 9. Ôóíêöèÿ ñîçäàåò íîâóþ äèðåêòîðèþ.==========================================================================================================================
// Åñëè ñîçäàíèå äèðåêòîðèè ïðîøëî óñïåøíî, ôóíêöèÿ âîçâðàùàåò TRUE, èíà÷å âîçâðàùàåò FALSE.
bool CreateDirectory (string PathName) // Ïóòü ê äèðåêòîðèè.
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  if (!CreateDirectoryA (PathName, 0))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"CreateDirectory()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else return (true);
 }
//===============================================================================================================================================================
//10. Ôóíêöèÿ óäàëÿåò ñóùåñòâóþùóþ äèðåêòîðèþ.===================================================================================================================
// Åñëè óäàëåíèå äèðåêòîðèè ïðîøëî óñïåøíî, ôóíêöèÿ âîçâðàùàåò TRUE, èíà÷å âîçâðàùàåò FALSE.
bool RemoveDirectory (string PathName) // Ïóòü ê äèðåêòîðèè.
 {
  int Error; // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  RtlSetLastWin32Error (0);
  if (!RemoveDirectoryA (PathName))
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"CreateDirectory()\". Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (false);
   }
  else return (true);
 }
//===============================================================================================================================================================
//11. Ôóíêöèÿ âîçâðàùàåò êîä ñèñòåìíîé îøèáêè.===================================================================================================================
int SystemError()
 {
  return (RtlGetLastWin32Error());
 }
//===============================================================================================================================================================
//12. Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå îïèñàíèå êîäà ñèñòåìíîé îøèáêè.===============================================================================================
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) + ".");
 }
//===============================================================================================================================================================
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
/*#import "kernel32.dll"
  int FindFirstFileA (string path, int& answer[]);
  bool FindNextFileA (int handle, int& answer[]);
#import
//+------------------------------------------------------------------+
void FileVariablesDeleteAll()
 {
  int win32_DATA[79];
  int handle = FindFirstFileA (TerminalPath() + "\experts\files\*", win32_DATA);

  while (FindNextFileA (handle, win32_DATA))
   {
    FileDelete (bufferToString (win32_DATA));
    ArrayInitialize (win32_DATA, 0);
   }
 }
//+--------------------------------+ 
string bufferToString (int buffer[])
 {
  string text = "";
  for (int pos = 11; pos < 75; pos++)
   {
    int curr = buffer[pos];
    text = text + CharToStr (curr & 0x000000FF)
                + CharToStr (curr >> 8 & 0x000000FF)
                + CharToStr (curr >> 16 & 0x000000FF)
                + CharToStr (curr >> 24 & 0x000000FF);
   }
  return(text);
 }*/
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:
ntdll
kernel32

Order Management characteristics:

Other Features: