Todas as coisas desnecessárias removidas como leitura não são necessárias, basta pegar o diretório e lá criar um arquivo com valor que é inicialmente conhecido, isso é tudo.
Perguntas:
1. Não consigo descobrir onde está o valor que estamos escrevendo para o arquivo?
2. Eu não consigo localizar onde está escrito um erro?
Obrigado de antemão.
//===============================================================================================================================================================// Импортируемые функции.//===============================================================================================================================================================#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));
}
//===============================================================================================================================================================// Конец//===============================================================================================================================================================
}
Todas as coisas desnecessárias removidas como leitura não são necessárias, basta pegar o diretório e lá criar um arquivo com valor que é inicialmente conhecido, isso é tudo.
Perguntas:
1. Não consigo descobrir onde está o valor que estamos escrevendo para o arquivo?
2. Eu não consigo localizar onde está escrito um erro?
Obrigado de antemão.
Artyom!!! Onde está escrito que não funciona com o Windows 7? Por que você está lendo de forma tão desatenta? Não me surpreende que isso não funcione para você.
Olhei para seu código e percebi que você não sabe como programar. Pegue primeiro o exemplo da ajuda. Execute-o. Veja como funciona. Em seguida, passar a coisas mais complicadas.
Um arquivo é criado ou aberto pela primeira vez. Em seguida, escreva ou leia. Em seguida, feche-a. Você acabou de copiar as declarações de função para o início. Você arrancou um pedaço de código de uma função universal. Agora, ele simplesmente fica ali. Não tem nada a ver com nada. Para que é isso? Não vai funcionar.
Olá a todos. Estou tentando escrever uma função que escreve um arquivo em um diretório especificado pelo usuário (trabalhando fora da caixa de areia).
Eu escrevi código usando a biblioteca"ZI_File_Functions_Full_Lib"https://www.mql5.com/ru/code/8577
A função"PathFunctions.dll."https://www.mql5.com/ru/code/10873 não é adequado como funciona com Vista, eu tenho Windows 7.
Todas as coisas desnecessárias removidas como leitura não são necessárias, basta pegar o diretório e lá criar um arquivo com valor que é inicialmente conhecido, isso é tudo.
Perguntas:
1. Não consigo descobrir onde está o valor que estamos escrevendo para o arquivo?
2. Eu não consigo localizar onde está escrito um erro?
Obrigado de antemão.
Olá a todos. Estou tentando escrever uma função que escreve um arquivo em um diretório especificado pelo usuário (trabalhando fora da caixa de areia).
Eu escrevi código usando a biblioteca"ZI_File_Functions_Full_Lib"https://www.mql5.com/ru/code/8577
A função"PathFunctions.dll."https://www.mql5.com/ru/code/10873não é adequado como funciona com Vista, eu tenho Windows 7.
Todas as coisas desnecessárias removidas como leitura não são necessárias, basta pegar o diretório e lá criar um arquivo com valor que é inicialmente conhecido, isso é tudo.
Perguntas:
1. Não consigo descobrir onde está o valor que estamos escrevendo para o arquivo?
2. Eu não consigo localizar onde está escrito um erro?
Obrigado de antemão.
Artyom!!! Onde está escrito que não funciona com o Windows 7? Por que você está lendo de forma tão desatenta? Não me surpreende que isso não funcione para você.
Olhei para seu código e percebi que você não sabe como programar. Pegue primeiro o exemplo da ajuda. Execute-o. Veja como funciona. Em seguida, passar a coisas mais complicadas.
Um arquivo é criado ou aberto pela primeira vez. Em seguida, escreva ou leia. Em seguida, feche-a. Você acabou de copiar as declarações de função para o início. Você arrancou um pedaço de código de uma função universal. Agora, ele simplesmente fica ali. Não tem nada a ver com nada. Para que é isso? Não vai funcionar.
Boa tarde, você poderia me dizer como fechar o testador de estratégia, o que eu tenho que pressionar?
Qual documento eu tenho que carregar em minha conta pessoal?
Para quê?
a fim de retirar fundos
Depende da empresa de corretagem. Eu, por exemplo, tenho uma cópia do meu passaporte e um questionário