[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 558

 

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.

//===============================================================================================================================================================
//     Импортируемые функции.
//===============================================================================================================================================================

#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);
      }
     else return (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));
    }
//===============================================================================================================================================================
//    Конец
//===============================================================================================================================================================
}
 
merkulov.artem:

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?
 
angelina8:
Boa tarde, você poderia me dizer como fechar o testador de estratégia, o que eu tenho que pressionar?

 
Você pode pressionar Ctrl+R, ou - botão no menu mt4, que está circulado em vermelho na ilustração acima.
 
Qual documento eu tenho que carregar em minha conta pessoal?
 
angelina8:
Qual documento eu tenho que carregar em minha conta pessoal?

Para quê?
 
para retirar fundos
 
angelina8:
a fim de retirar fundos


Depende da empresa de corretagem. Eu, por exemplo, tenho uma cópia do meu passaporte e um questionário
 
Uma cópia do passaporte 1,2 e 11? O que é o formulário?
Razão: