дата и время таблицы
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
дата и время таблицы
Дорогие форумчане!
Подскажите, как (какой функцией) узнать дату и время таблицы или файла через MapBasic ?
Подскажите, как (какой функцией) узнать дату и время таблицы или файла через MapBasic ?
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: дата и время таблицы
Думаю, что только через функцию WinAPI
http://www.vbnet.ru/winapi/showfunction.asp?id=22
Код: Выделить всё
Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: дата и время таблицы
Большое спасибо! буду пробовать...
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: дата и время таблицы
создал файл:
'* GetFileTime1
Type FILETIME dwLowDateTime As Integer
dwHighDateTime As Integer
End Type
Global lngHandle as string
'Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
'вместо Long --> Integer
Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Integer, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME,
lpLastWriteTime As FILETIME) As Integer
lngHandle="C:\Mapinfo\mapbasic\T_kolw.dat"
GetFileTime IngHandle,Ft1,Ft1,Ft2
Note Ft1
Note Ft2
Выдает ошибку:
Unrecognized command GetFileTime
'* GetFileTime1
Type FILETIME dwLowDateTime As Integer
dwHighDateTime As Integer
End Type
Global lngHandle as string
'Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
'вместо Long --> Integer
Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Integer, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME,
lpLastWriteTime As FILETIME) As Integer
lngHandle="C:\Mapinfo\mapbasic\T_kolw.dat"
GetFileTime IngHandle,Ft1,Ft1,Ft2
Note Ft1
Note Ft2
Выдает ошибку:
Unrecognized command GetFileTime
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: дата и время таблицы
В принципе должно быть приблизительно так
Увы, где то баг
- Note выдаёт неправильные значения. У меня сегодня-завтра плохо со временем, но может кто укажет на ошибку.
Код: Выделить всё
Type SystemTime
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Type FileTime
dwLowDateTime As Integer
dwHighDateTime As Integer
End Type
Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Integer, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Integer
Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpFileName As String, ByVal wReadWrite As Integer) As Integer
Declare Function lclose Lib "Kernel32" Alias "_lclose" (ByVal hFile As Integer) As Integer
Declare Function FileTimeToSystemTime Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Integer
Declare Function FileTimeToLocalFileTime Lib "kernel32" Alias "FileTimeToLocalFileTime" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Integer
Dim ihFile As Integer
Dim ftLocal, ftCreate, ftAccess, ftWrite As FileTime
Dim stCreateFile As SystemTime
Dim iTemp As Integer
ihFile = lOpen("C:\Mapinfo\mapbasic\T_kolw.dat", 0)
iTemp = GetFileTime(ihFile, ftCreate, ftAccess, ftWrite)
iTemp = FileTimeToLocalFileTime(ftCreate, ftLocal)
iTemp = FileTimeToSystemTime(ftLocal, stCreateFile)
Note "День " + Str$(stCreateFile.wDay) + "Час " + Str$(stCreateFile.wHour)
iTemp = lClose(ihFile)

-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: дата и время таблицы
Может быть есть более короткий текст программы, правильный, и чтобы была только дата (31.12.2011) ?
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: дата и время таблицы
Роман01 писал(а):Может быть есть более короткий текст программы, правильный, и чтобы была только дата (31.12.2011) ?
Код: Выделить всё
Run Command "dir c:\mapinfo\mapbasic\T_kolw.dat >> c:\mapinfo\mapbasic\a.txt"
Код: Выделить всё
Том в устройстве C не имеет метки.
Серийный номер тома: 1111-2222
Содержимое папки c:\mapinfo\mapbasic
31.12.2011 17:00 3 T_kolw.dat
1 файлов 3 байт
0 папок 109 972 443 136 байт свободно
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: дата и время таблицы
Ну тогда и анализировать ничего не надо, если использовать команду
тогда для
получим в файле a.txt что-то вот такое:
Код: Выделить всё
Run Command "cmd /с for %a in ("""+путь_к_файлу+""") do @echo %~ta %~za %~fa>c:\mapinfo\mapbasic\a.txt"
Код: Выделить всё
cmd /c for %a in ("AUTOEXEC.BAT") do @echo %~ta %~za %~fa>a.txt
16.12.2011 02:05 876 C:\AUTOEXEC.BAT
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: дата и время таблицы
Но, вообще, мне нужно в переменную поместить дату для файла c:\mapinfo\mapbasic\t_kolw.dat и сравнить с датой файла d:\mapinfo\mapbasic\t_kolw.dat
Если на d:\ позже, то скачать на с:\
Если на d:\ позже, то скачать на с:\
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: дата и время таблицы
Ну и зачем тут мапбасик? Это же обычная операция с двумя файлами. Для нее есть широчайшее число продуктов. Самый простой - BAT файл командной строки Windows. Чуть сложнее, но так же эффективно - скрипт на любом языке, котрый позволяет эффективно обращаться к атрибутам файла. Единственное препятствие порядок дд-мм-гггг для локальных настроек - лексикографичемкое сравнение даст неверные результаты.
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: дата и время таблицы
Так а как это организовать? Я пишу программу на мэпбэйсик - мне нужно сравнить файлы и переписать, если в сети находится более поздний файл на рабочую станцию.
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: дата и время таблицы
Как вариант - в архиве утилита командной сроки update32.exe
UPDATE32.EXE d:\mapinfo\mapbasic c:\mapinfo\mapbasic
и если в d:\mapinfo\mapbasic фалы новее чем в c:\mapinfo\mapbasic, получаете результат
Copy d:\mapinfo\mapbasic\T_kolw.dat to c:\mapinfo\mapbasic\T_kolw.dat
UPDATE32.EXE d:\mapinfo\mapbasic c:\mapinfo\mapbasic
и если в d:\mapinfo\mapbasic фалы новее чем в c:\mapinfo\mapbasic, получаете результат
Copy d:\mapinfo\mapbasic\T_kolw.dat to c:\mapinfo\mapbasic\T_kolw.dat
- Вложения
-
UPDATE32.rar
- (22.39 КБ) 356 скачиваний
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: дата и время таблицы
Уважаемый dab!
Я составил программу из вашего кода:
ihFile = lOpen("C:\Mapinfo\mapbasic\T_kolw.dat", 0)
iTemp = GetFileTime(ihFile, ftCreate, ftAccess, ftWrite)
iTemp = FileTimeToLocalFileTime(ftCreate, ftLocal)
iTemp = FileTimeToSystemTime(ftLocal, stCreateFile)
Note "День " + Str$(stCreateFile.wDay) + "Час " + Str$(stCreateFile.wHour)
Однако она выдает слишком большие значения день - 18415632, месяц - 1572867 ...
Помогите, пожалуйста, определить настоящую дату файла.
Роман.
Я составил программу из вашего кода:
ihFile = lOpen("C:\Mapinfo\mapbasic\T_kolw.dat", 0)
iTemp = GetFileTime(ihFile, ftCreate, ftAccess, ftWrite)
iTemp = FileTimeToLocalFileTime(ftCreate, ftLocal)
iTemp = FileTimeToSystemTime(ftLocal, stCreateFile)
Note "День " + Str$(stCreateFile.wDay) + "Час " + Str$(stCreateFile.wHour)
Однако она выдает слишком большие значения день - 18415632, месяц - 1572867 ...
Помогите, пожалуйста, определить настоящую дату файла.
Роман.
-
- Активный участник
- Сообщения: 161
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: дата и время таблицы
Для MI_10 и выше можно предложить использование сборок NET.
Прилагаемый пример чисто демонстрационный, а в реальности библиотеку нужно делать под блок необходимых функций. В данном случае использованы: VS2008, MB10.
В принципе можно использовать функции и непосредственно из NET Framework (понадобится получить строгое имя сборки хранящейся в глобальном кэше сборок).
Прилагаемый пример чисто демонстрационный, а в реальности библиотеку нужно делать под блок необходимых функций. В данном случае использованы: VS2008, MB10.
В принципе можно использовать функции и непосредственно из NET Framework (понадобится получить строгое имя сборки хранящейся в глобальном кэше сборок).
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: дата и время таблицы
Роман, извините, не могу помочь - не понимаю в чём проблема с этим кодомРоман01 писал(а): Помогите, пожалуйста, определить настоящую дату файла.

Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость