дата и время таблицы

MapInfo, MapBasic
Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

дата и время таблицы

Сообщение Роман01 » 23 мар 2012, 10:53

Дорогие форумчане!
Подскажите, как (какой функцией) узнать дату и время таблицы или файла через MapBasic ?

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: дата и время таблицы

Сообщение dab » 23 мар 2012, 11:47

Думаю, что только через функцию WinAPI

Код: Выделить всё

Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
http://www.vbnet.ru/winapi/showfunction.asp?id=22

Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

Re: дата и время таблицы

Сообщение Роман01 » 26 мар 2012, 11:25

Большое спасибо! буду пробовать...

Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

Re: дата и время таблицы

Сообщение Роман01 » 26 мар 2012, 11:53

создал файл:
'* 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: дата и время таблицы

Сообщение dab » 26 мар 2012, 14:39

В принципе должно быть приблизительно так

Код: Выделить всё

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) 
Увы, где то баг :( - Note выдаёт неправильные значения. У меня сегодня-завтра плохо со временем, но может кто укажет на ошибку.

Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

Re: дата и время таблицы

Сообщение Роман01 » 27 мар 2012, 10:50

Может быть есть более короткий текст программы, правильный, и чтобы была только дата (31.12.2011) ?

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: дата и время таблицы

Сообщение dab » 27 мар 2012, 12:02

Роман01 писал(а):Может быть есть более короткий текст программы, правильный, и чтобы была только дата (31.12.2011) ?

Код: Выделить всё

Run Command "dir c:\mapinfo\mapbasic\T_kolw.dat >> c:\mapinfo\mapbasic\a.txt"
получите текстовый файл atxt

Код: Выделить всё

 Том в устройстве C не имеет метки.
 Серийный номер тома: 1111-2222

 Содержимое папки c:\mapinfo\mapbasic

31.12.2011  17:00                 3 T_kolw.dat
               1 файлов              3 байт
               0 папок  109 972 443 136 байт свободно
открывайте файл в MapBasic, анализируйте 6 строку

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: дата и время таблицы

Сообщение Boris » 28 мар 2012, 01:42

Ну тогда и анализировать ничего не надо, если использовать команду

Код: Выделить всё

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
получим в файле a.txt что-то вот такое:
16.12.2011 02:05 876 C:\AUTOEXEC.BAT

Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

Re: дата и время таблицы

Сообщение Роман01 » 28 мар 2012, 03:40

Но, вообще, мне нужно в переменную поместить дату для файла c:\mapinfo\mapbasic\t_kolw.dat и сравнить с датой файла d:\mapinfo\mapbasic\t_kolw.dat
Если на d:\ позже, то скачать на с:\

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: дата и время таблицы

Сообщение Boris » 28 мар 2012, 04:34

Ну и зачем тут мапбасик? Это же обычная операция с двумя файлами. Для нее есть широчайшее число продуктов. Самый простой - BAT файл командной строки Windows. Чуть сложнее, но так же эффективно - скрипт на любом языке, котрый позволяет эффективно обращаться к атрибутам файла. Единственное препятствие порядок дд-мм-гггг для локальных настроек - лексикографичемкое сравнение даст неверные результаты.

Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

Re: дата и время таблицы

Сообщение Роман01 » 28 мар 2012, 04:43

Так а как это организовать? Я пишу программу на мэпбэйсик - мне нужно сравнить файлы и переписать, если в сети находится более поздний файл на рабочую станцию.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: дата и время таблицы

Сообщение dab » 28 мар 2012, 09:01

Как вариант - в архиве утилита командной сроки 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.rar
(22.39 КБ) 356 скачиваний

Роман01
Участник
Сообщения: 66
Зарегистрирован: 03 авг 2010, 04:24
Репутация: 0

Re: дата и время таблицы

Сообщение Роман01 » 31 июл 2013, 11:23

Уважаемый 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 ...

Помогите, пожалуйста, определить настоящую дату файла.

Роман.

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: дата и время таблицы

Сообщение thegeo » 31 июл 2013, 14:42

Для MI_10 и выше можно предложить использование сборок NET.
Прилагаемый пример чисто демонстрационный, а в реальности библиотеку нужно делать под блок необходимых функций. В данном случае использованы: VS2008, MB10.
В принципе можно использовать функции и непосредственно из NET Framework (понадобится получить строгое имя сборки хранящейся в глобальном кэше сборок).
rez.png
rez.png (1.75 КБ) 10112 просмотров
DateTime.rar
(4.48 КБ) 342 скачивания

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: дата и время таблицы

Сообщение dab » 31 июл 2013, 14:54

Роман01 писал(а): Помогите, пожалуйста, определить настоящую дату файла.
Роман, извините, не могу помочь - не понимаю в чём проблема с этим кодом :(

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

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