Скачать MetaTrader 5

Как прочитать время-дату создания файлов?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы по сервису MQL5 Cloud Network? FAQ поможет!
Александр
217
Александр 2013.11.04 14:39 

Как прочитать время-дату создания файлов в формате TimeLocal()?

Файлы в папке \experts\files\.

alex
152
alex 2013.11.04 14:48  
religare:

Как прочитать время-дату создания файлов в формате TimeLocal()?

Файлы в папке \experts\files\.



как то так наверное...

http://www.bigpi.biysk.ru/bibl/_fullpage/prog/winapi_rumiantsev_ii.pdf

Александр
217
Александр 2013.11.04 15:33  
Спасибо, нашел, функция GetFileTime(). Только у меня она возвращает "0". Что-то не так с извлечением данных.
Dmitry Fedoseev
42885
Dmitry Fedoseev 2013.11.04 17:19  
#import "kernel32.dll"
   int CreateFileA(string lpFileName,int dwDesiredAccess,int dwShareMode,int & lpSecurityAttributes[],int dwCreationDisposition,int dwFlagsAndAttributes,int hTemplateFile);
   bool GetFileTime (int hFile,int & lpCreationTime[],int & lpLastAccessTime[],int & lpLastWriteTime[]);
   int CloseHandle (int hObject);
   int FileTimeToSystemTime (int & lpFileTime[],int & lpSystemTime[]);
#import

#define GENERIC_READ 0x80000000
#define FILE_SHARE_READ 1
#define OPEN_EXISTING 3
#define INVALID_HANDLE_VALUE -1

int start(){

   string FileName="test.txt";

   int lpSecurityAttributes[3];
   int ftCreate[2];
   int ftAccess[2];
   int ftWrite[2];
   int lpSystemTime[4];

   int hFile = CreateFileA(TerminalPath()+"\\experts\\files\\"+FileName, GENERIC_READ, FILE_SHARE_READ, lpSecurityAttributes, OPEN_EXISTING, 0, 0);
      if(hFile!=INVALID_HANDLE_VALUE){
         if(GetFileTime(hFile,ftCreate,ftAccess,ftWrite)){
               FileTimeToSystemTime(ftCreate,lpSystemTime);
               //FileTimeToSystemTime(ftAccess,lpSystemTime);
               //FileTimeToSystemTime(ftWrite,lpSystemTime);
               int nYear=lpSystemTime[0]&0x0000FFFF;
               int nMonth=lpSystemTime[0]>>16;
               int nDay=lpSystemTime[1]>>16;
               int nHour=lpSystemTime[2]&0x0000FFFF;
               int nMin=lpSystemTime[2]>>16;
               int nSec=lpSystemTime[3]&0x0000FFFF;
               Alert("nYear="+nYear+", nMonth="+nMonth+", nDay="+nDay+", nHour="+nHour+", nMin="+nMin+", nSec="+nSec+"");
         }
         CloseHandle(hFile);
      }         

   return(0);
}
Комбинатор
15919
Комбинатор 2013.11.04 21:03  
Integer:
Вместо lpSecurityAttributes надо 0.
Александр
217
Александр 2013.11.05 08:57  
Круто! Спасибо! Буду экспериментировать. Теперь смогу реализовать такую задачу: 2 файла сохраняются - один из советника, другой - из индикатора. Если различия в сроках обновления больше 2-3 минут, то из индикатора делаем переход на другой тайм-фрейм и возврат на предыдущий. Советник перезапускается. Так можно решить проблему, когда с сервером есть связь, интернет есть, а советник не работает.
Snaf
111
Snaf 2013.11.05 09:15  
religare:
Круто! Спасибо! Буду экспериментировать. Теперь смогу реализовать такую задачу: 2 файла сохраняются - один из советника, другой - из индикатора. Если различия в сроках обновления больше 2-3 минут, то из индикатора делаем переход на другой тайм-фрейм и возврат на предыдущий. Советник перезапускается. Так можно решить проблему, когда с сервером есть связь, интернет есть, а советник не работает.

А не проще писать в файл TimeLocal()?
Dmitry Fedoseev
42885
Dmitry Fedoseev 2013.11.05 09:25  
Snaf:

А не проще писать в файл TimeLocal()?

Можно и не в файл, проще в глобальную переменную терминала.
Vitalie Postolache
12115
Vitalie Postolache 2013.11.05 10:11  
religare:
Круто! Спасибо! Буду экспериментировать. Теперь смогу реализовать такую задачу: 2 файла сохраняются - один из советника, другой - из индикатора. Если различия в сроках обновления больше 2-3 минут, то из индикатора делаем переход на другой тайм-фрейм и возврат на предыдущий. Советник перезапускается. Так можно решить проблему, когда с сервером есть связь, интернет есть, а советник не работает.

Это действительно реально реализовать? Как? Не читать индикатором из другого тайма, а именно окно в котором советник работает перевести на другой тайм и обратно...
Vadim Zhunko
5227
Vadim Zhunko 2013.11.05 10:30  
evillive:

Это действительно реально реализовать? Как? Не читать индикатором из другого тайма, а именно окно в котором советник работает перевести на другой тайм и обратно...

Библиотека.

Раздел 4.5.

Александр
217
Александр 2013.11.05 10:55  

Это на случай случайного нажатия того тайм-фрейма, который не является рабочим. Возвращает на минутки. Можно переделать под свои задачи, т.е. в моем случае переключится на один тайм-фрейм, а через несколько секунд вернутся. По идее этого будет достаточно, чтобы советник перезапустился.


void Startimeframe()
{
        int hWnd, wParam;
        switch(Period())
        {
                case PERIOD_M1:  wParam = 33137; break;
                case PERIOD_M5:  wParam = 33138; break;
                case PERIOD_M15: wParam = 33139; break;
                case PERIOD_M30: wParam = 33140; break;
                case PERIOD_H1:  wParam = 33135; break;
                case PERIOD_H4:  wParam = 33136; break;
                case PERIOD_D1:  wParam = 33134; break;
                case PERIOD_W1:  wParam = 33141; break;
                case PERIOD_MN1: wParam = 33334; break;
        }
        hWnd = WindowHandle(SymbolMax[nnnn],Period());
        if(wParam!=33137) PostMessageA(hWnd,WM_COMMAND,33137,0);
}
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий