//+------------------------------------------------------------------------------------------------------------------+ //| 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: