//===============================================================================================================================================================// Импортируемые функции.//===============================================================================================================================================================#import "ntdll.dll"int RtlGetLastWin32Error();
int RtlSetLastWin32Error (int dwErrCode);
#import#include <WinKernel32.mqh> // Заголовочный файл библиотеки "kernel32.dll" функций API Windows XP.//===============================================================================================================================================================// Объявленные константы.//===============================================================================================================================================================#define FILE_FULL_CREATE 0// Создать или переписать файл.//===============================================================================================================================================================// Функция открывает или создаёт файл.// Функция открывает/создает файл для ввода и/или вывода. Если при открытии для записи файла нет, то он будет создан. Для создания директории// используется функция "CreateDirectory()". Функция возвращает: handle - файловый описатель, если функция выполнилась без ошибки;// -1 - возникла системная ошибка;// -2 - ошибка при перемещении файлового указателя в конец файла;// -3 - указан недопустимый способ открытия файла.//===============================================================================================================================================================int start(){
int FileOpenFull (string PathName="D:\files\DATA.csv", // Имя файла с абсолютным путём.int ModeCWR=0) // Способ открытия файла: 0 - FILE_FULL_CREATE Открытие файла для записи. Если файл существует, то содержимое файла будет// уничтожено. Если файл с таким именем не существует, то будет создан новый.
{
int Error; // Номер последней ошибки.int Handle; // Файловый описатель.//===============================================================================================================================================================
RtlSetLastWin32Error(0); // Обнуляем ошибку.if (ModeCWR != FILE_FULL_READ) // Если функция вызвана не для чтения, проверяем на наличие файла.
{ // Проверяем на наличие файла. Читаем файл.
Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (RtlGetLastWin32Error() == 2 && Handle == -1) ModeCWR = FILE_FULL_CREATE; // Файла нет. Создаём файл.else
{
if (!CloseHandle (Handle))
{
Error = RtlGetLastWin32Error();
Print ("Ошибка в функции \"FileOpenFull()\". Файл с путём \"", PathName, "\" не закрыт при проверки на наличие. Последняя ошибка: \"", Error, "\". ", StringError (Error));
return (-1);
}
}
RtlSetLastWin32Error(0); // Обнуляем ошибку.
}
//===============================================================================================================================================================// Переключатель по способам открытия файла.//===============================================================================================================================================================switch (ModeCWR)
{ // Создаём файл.case FILE_FULL_CREATE:
{
Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (Handle == -1)
{
Error = RtlGetLastWin32Error();
Print ("Ошибка в функции \"FileOpenFull()\". Файл с путём \"", PathName, "\" не открыт. Последняя ошибка: \"", Error, "\". ", StringError (Error));
}
return (Handle);
}
//===============================================================================================================================================================// Функция закрытия файла.// Функция закрывает ранее открытый файл. Если файл закрыт успешно, функция возвращает TRUE, иначе возвращает FALSE.//===============================================================================================================================================================bool FileCloseFull (int Handle) // Файловый описатель, возвращаемый функцией "FileOpenFull()".
{
int Error; // Номер последней ошибки.//----
RtlSetLastWin32Error (0);
if (!CloseHandle (Handle))
{
Error = RtlGetLastWin32Error();
Print ("Ошибка в функции \"FileCloseFull()\". Последняя ошибка: \"", Error, "\". ", StringError (Error));
return (false);
}
elsereturn (true);
}
//===============================================================================================================================================================// Функция возвращает код системной ошибки.//===============================================================================================================================================================int SystemError()
{
return (RtlGetLastWin32Error());
}
//===============================================================================================================================================================// Функция возвращает строковое описание кода системной ошибки.//===============================================================================================================================================================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));
}
//===============================================================================================================================================================// Конец//===============================================================================================================================================================
}
并非如此...
我想做一个类似于菜单的东西。就像Bool变量中的假或真一样。
用户甚至是我自己。因为有可能忘记某个特定变量应该有哪些参数。这样,用户就可以只点击明确定义的参数值。这样,他就不会 "错误地 "输入不必要的,因为在这种情况下,专家顾问将无法正常工作。
MQL4没有这种可能性(但MQL5有)。你可以在初始化时检查这个参数,如果它不对应于某个值,那么就发出错误信号。那么在开始的时候就应该进行检查。例如,我在我的EA中就是这样做的。
大家好。我想写一个函数,把一个文件写到用户指定的目录中(在沙盒外工作)。
我使用"ZI_File_Functions_Full_Lib"库编写代码https://www.mql5.com/ru/code/8577
函数"PathFunctions.dll."https://www.mql5.com/ru/code/10873 不适合,因为它适用于Vista,我有Windows 7。
所有不必要的东西都去掉了,因为不需要阅读,只需要取目录,并在那里创建带有最初已知值的文件,这就是全部。
问题。
1.我搞不清楚我们要写到文件中的值在哪里?
2.我无法找到写错的地方?
提前感谢。
大家好。我想写一个函数,把一个文件写到用户指定的目录中(在沙盒外工作)。
我使用"ZI_File_Functions_Full_Lib"库编写代码https://www.mql5.com/ru/code/8577
函数"PathFunctions.dll."https://www.mql5.com/ru/code/10873不适合,因为它适用于Vista,我有Windows 7。
所有不必要的东西都去掉了,因为不需要阅读,只需要取目录,并在那里创建带有最初已知值的文件,这就是全部。
问题。
1.我搞不清楚我们要写到文件中的值在哪里?
2.我无法找到写错的地方?
提前感谢。
Artyom!!!哪里写着它不能在Windows 7下工作?你为什么这么不专心致志地阅读?我并不惊讶它对你不起作用。
我看了你的代码,发现你不知道如何编程。首先以帮助中的例子为例。运行它。看看它是如何工作的。然后再去做更复杂的事情。
一个文件首先被创建或打开。然后写或读。然后关闭它。你只是把函数的声明复制到了开始。你从一个通用函数中撕下了一段代码。现在它只是挂在那里。这与任何事情都没有关系。那是为了什么?这是不可能的。
下午好,请告诉我如何关闭策略测试器,我需要按什么?
我必须向我的个人账户上传哪些文件?
为了什么?
以便提取资金
这取决于经纪公司的情况。比如说我,我有一份护照的复印件和一份调查问卷