Страница 1 из 2
дата и время таблицы
Добавлено: 23 мар 2012, 10:53
Роман01
Дорогие форумчане!
Подскажите, как (какой функцией) узнать дату и время таблицы или файла через MapBasic ?
Re: дата и время таблицы
Добавлено: 23 мар 2012, 11:47
dab
Думаю, что только через функцию 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
Re: дата и время таблицы
Добавлено: 26 мар 2012, 11:25
Роман01
Большое спасибо! буду пробовать...
Re: дата и время таблицы
Добавлено: 26 мар 2012, 11:53
Роман01
создал файл:
'* 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
Re: дата и время таблицы
Добавлено: 26 мар 2012, 14:39
dab
В принципе должно быть приблизительно так
Код: Выделить всё
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 выдаёт неправильные значения. У меня сегодня-завтра плохо со временем, но может кто укажет на ошибку.
Re: дата и время таблицы
Добавлено: 27 мар 2012, 10:50
Роман01
Может быть есть более короткий текст программы, правильный, и чтобы была только дата (31.12.2011) ?
Re: дата и время таблицы
Добавлено: 27 мар 2012, 12:02
dab
Роман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 строку
Re: дата и время таблицы
Добавлено: 28 мар 2012, 01:42
Boris
Ну тогда и анализировать ничего не надо, если использовать команду
Код: Выделить всё
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
Re: дата и время таблицы
Добавлено: 28 мар 2012, 03:40
Роман01
Но, вообще, мне нужно в переменную поместить дату для файла c:\mapinfo\mapbasic\t_kolw.dat и сравнить с датой файла d:\mapinfo\mapbasic\t_kolw.dat
Если на d:\ позже, то скачать на с:\
Re: дата и время таблицы
Добавлено: 28 мар 2012, 04:34
Boris
Ну и зачем тут мапбасик? Это же обычная операция с двумя файлами. Для нее есть широчайшее число продуктов. Самый простой - BAT файл командной строки Windows. Чуть сложнее, но так же эффективно - скрипт на любом языке, котрый позволяет эффективно обращаться к атрибутам файла. Единственное препятствие порядок дд-мм-гггг для локальных настроек - лексикографичемкое сравнение даст неверные результаты.
Re: дата и время таблицы
Добавлено: 28 мар 2012, 04:43
Роман01
Так а как это организовать? Я пишу программу на мэпбэйсик - мне нужно сравнить файлы и переписать, если в сети находится более поздний файл на рабочую станцию.
Re: дата и время таблицы
Добавлено: 28 мар 2012, 09:01
dab
Как вариант - в архиве утилита командной сроки 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
Re: дата и время таблицы
Добавлено: 31 июл 2013, 11:23
Роман01
Уважаемый 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 ...
Помогите, пожалуйста, определить настоящую дату файла.
Роман.
Re: дата и время таблицы
Добавлено: 31 июл 2013, 14:42
thegeo
Для MI_10 и выше можно предложить использование сборок NET.
Прилагаемый пример чисто демонстрационный, а в реальности библиотеку нужно делать под блок необходимых функций. В данном случае использованы: VS2008, MB10.
В принципе можно использовать функции и непосредственно из NET Framework (понадобится получить строгое имя сборки хранящейся в глобальном кэше сборок).

- rez.png (1.75 КБ) 10138 просмотров
Re: дата и время таблицы
Добавлено: 31 июл 2013, 14:54
dab
Роман01 писал(а):
Помогите, пожалуйста, определить настоящую дату файла.
Роман, извините, не могу помочь - не понимаю в чём проблема с этим кодом
