Страница 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
rez.png (1.75 КБ) 10120 просмотров
DateTime.rar
(4.48 КБ) 342 скачивания

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

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