Как получить дату/время созданиям файла/последнего доступа к файлу/последней записи в файл (помогите прикрутить WinAPI GetFileTime)
Если умеете преобразовывать структуру FILETIME в юникс время -- вот пожалуйста --
импорт
bool GetFileTime(int hFile, int& lpCreationTime[], int& lpLastAccessTime[], int& lpLastWriteTime[]);
использование
// requesting time properties int creation[2], lastAccess[2], lastModify[2]; if (GetFileTime(hFile, creation, lastAccess, lastModify)) { //... }
Хендл hFile для этой функции должен быть создан функцией CreateFileA, а никак не нативным FileOpen.
А можно обойтись без преобразования в UNIX время? Мне нужно просто сравнить время последнего изменения файла с предыдущим временем изменения, чтобы, если время последнего изменения больше времени предпоследнего изменения, выполнить заданные действия
ну тогда покопайте в сторону что такое FILETIME. позадавайте в него разные значения, может и поймете опытным путем как правильно их сравнивать. иначе в MSDN прямая дорога
bool GetFileTime(int hFile, int& lpCreationTime[], int& lpLastAccessTime[], int& lpLastWriteTime[]);
#import
void init() {
handle = FileOpenFull(TerminalPath()+"\history\Alpari-Demo\iEURUSD1.hst",2);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
int creation[2], lastAccess[2], lastModify[2];
int array[6];
bool filetime;
Alert(handle);
//RefreshRates();
int hwnd=WindowHandle(Symbol(),Period());
filetime = GetFileTime(handle, creation, lastAccess, lastModify);
Alert("filetime: "+filetime);
Подскажите, в чем здесь ошибка? Выдает: 'GetFileTime' - function already defined and has a different parameters E:\Terminal_Alpari\experts\scripts\Offline_Refresher.mq4 (18, 307)
Если закоментирую импорт из kernel32 (может она уже определена где-то), то пишет, что функция не определена
Если делаю так:
#import "kernel32.dll"
bool GetFileTime(int hFile, int& lpCreationTime[6]);
#import
void init() {
handle = FileOpenFull(TerminalPath()+"\history\Alpari-Demo\iEURUSD1.hst",2);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
int creation[6];
int array[6];
bool filetime;
Alert(handle);
//RefreshRates();
int hwnd=WindowHandle(Symbol(),Period());
filetime = GetFileTime(handle, creation);
Alert("filetime: "+filetime);
То вылетает:
2013.01.29 17:02:53 Offline_Refresher EURUSD,M1: function 'GetFileTime' call from dll 'kernel32.dll' critical error c0000005 at 7506E5E4.
Все вопрос в предыдущем посте решен - нужно было убрать функцию, которая была справа и я ее не видел
Теперь другой вопрос: время последнего создания файла возвращается одно и то же
Для работы кода нужно подключить это: https://www.mql5.com/ru/code/8577 и закоментировать в файле WinKernel32.mqh строку с функцией GetFileTime
Код:
//+------------------------------------------------------------------+ //| Offline_Refresher.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property show_inputs #include <WinUser32.mqh> #include <stdlib.mqh> #include <WinKernel32.mqh> #include <ZI_File_Functions_Full.mqh> int handle; int filetime_1; #import "kernel32.dll" bool GetFileTime(int hFile, int& lpCreationTime[], int& lpLastAccessTime[], int& lpLastWriteTime[]); #import void init() { handle = FileOpenFull(TerminalPath()+"\history\Alpari-Demo\iEURUSD1.hst",1); } //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { int creation[2], lastAccess[2], lastModify[2]; int array[6]; bool filetime; Alert(handle); //while () //RefreshRates(); //int hwnd=WindowHandle(Symbol(),Period()); filetime = GetFileTime(handle, creation, lastAccess, lastModify); Alert("filetime: "+lastModify[1]); //int MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); //PostMessageA(hwnd, MT4InternalMsg, 2, 1); //WindowRedraw(); //(hwnd, WM_COMMAND, 0x822C, NULL); //PostMessageA(hwnd, WM_COMMAND,33324, 0); //Alert(hwnd+" "+Symbol()+" "+Period()); //PostMessageA(hwnd,WM_COMMAND,33324,0); // Обновляем график return(0); } //+------------------------------------------------------------------+ void deinit() { FileCloseFull(handle); }
В Alert("filetime: "+creation[1]); постоянно выводится одно и то же число - почему? Время создания файла постоянно меняется, если смотреть через Свойства файла, проверял
Может нужно смотреть время последней модификации?
Он пересоздается или просто изменяется?
Код:
void init() { handle = FileOpenFull(TerminalPath()+"\history\Alpari-Demo\iEURUSD1.hst",1); }
Это работает?! И ошибок не возвращает?
Может так надо:
void init() { handle = FileOpenFull(TerminalPath()+"\\history\\Alpari-Demo\\iEURUSD1.hst", 1); }
Для работы кода нужно подключить это: https://www.mql5.com/ru/code/8577 и закоментировать в файле WinKernel32.mqh строку с функцией GetFileTime
Это работает?!
Кстати да )
Да, работает с одинарным slashem
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте
Подскажите, пожалуйста, как получить по хендлу файла (получаем хендл через FileOpen) узнать его дату создания/последней записи/ последнего доступа?
Нужно для этого использовать WinAPI функцию. GetFileTime для этого, только у меня не получается ее правильно подключить и использовать