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