0
Views
0
Downloads
0
Favorites
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);
}*/
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---