Re: дата создания\изменения файла
Добавлено: 30 Август 2010, 9:43
Unresolved External GETFILEDATE@FsbUc in krbti003.obj
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Unresolved External GETFILEDATE@FsbUc in krbti003.obj
Подключите файл C55UTIL.CLW в проект (ветка External source files) или допишите в самом конце файла C55UTIL.INCKoss писал(а):Unresolved External GETFILEDATE@FsbUc in krbti003.obj
Код: Выделить всё
COMPILE('Link', _ABCLinkMode_)
PRAGMA('compile(C55UTIL.CLW)')
!Link
Если Вы про функции GetFileDate/GetFileTime, то посмотрите на их исходный текст, на оператор RETURN. А так... Время в Clarion это LONG - число сотых секунды с полуночи.Koss писал(а):А в каком формате кларион время возвращает?
PATH(), если до его вызова не было переходов в другую папку (SETPATH или FILEDIALOG или ещё как).Koss писал(а):А как GetCurrentDirectory получить?
Т.е. каталог, где экзешник запустили.
поиск GetCurrentDirectory по "C:\Program Files\Clarion 5.5" ничего не дал.
Как её использовать в самом кларионе?DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
Я так понимаю, с языком C Вы незнакомы? Тогда будет сложно. Попробую на данном конкретном случае объяснить суть:Koss писал(а):Извините, вот ещё вопрос.
Допустим откопали вы в гуглах нужную Вам апи функцию, видите, к примеру
SyntaxКак её использовать в самом кларионе?DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
Без всяких сторонних ресурсов?
через winapi.exe как-то ?
Код: Выделить всё
MODULE('WinApi')
GetFileSize(ULONG, *ULONG), ULONG, PASCAL, NAME('GetFileSize')
END
Код: Выделить всё
! Сначала объявляются типы и константы, а затем функции
Word EQUATE(UShort)
FILETIME Group,Type ! "файловое время"
dwLowDateTime ULong
dwHighDateTime ULong
End
SYSTEMTIME Group,Type ! "системное время"
wYear Word ! год
wMonth Word ! месяц
wDayOfWeek Word ! день недели
wDay Word ! число
wHour Word ! час
wMinute Word ! минута
wSecond Word ! секунда
wMilliseconds Word ! миллисекунда
End
! 1. идентификаторы доступа к файлу
GENERIC_READ EQUATE(80000000h)
GENERIC_WRITE EQUATE(40000000h)
GENERIC_EXECUTE EQUATE(20000000h)
GENERIC_ALL EQUATE(10000000h)
! 2. цели вызова функции CreateFile()
CREATE_NEW Equate(1) ! создать новый, если не существует (при существ. НЕ СРАБОТАЕТ-ошибка с кодом 80)
CREATE_ALWAYS Equate(2) ! создавать новый всегда (при существ. СРАБОТАЕТ-ошибка с кодом 183)
OPEN_EXISTING Equate(3) ! открыть существующий (при отсутств.НЕ СРАБОТАЕТ-ошибка с кодом 2)
OPEN_ALWAYS Equate(4) ! открыть всегда (при существ. СРАБОТАЕТ-ошибка с кодом 183)
! (при отсутств.СОЗДАЁТ -ошибка с кодом 0)
TRUNCATE_EXISTING Equate(5) ! открыть и усечь (при отсутств.НЕ СРАБОТАЕТ-ошибка с кодом 2), треб.GENERIC_WRITE
! 3. атрибуты файлов
FILE_ATTRIBUTE_READONLY EQUATE(00000001h)
FILE_ATTRIBUTE_HIDDEN EQUATE(00000002h)
FILE_ATTRIBUTE_SYSTEM EQUATE(00000004h)
FILE_ATTRIBUTE_ARCHIVE EQUATE(00000020h)
FILE_ATTRIBUTE_NORMAL EQUATE(00000080h)
FILE_ATTRIBUTE_TEMPORARY EQUATE(00000100h) ! временный
FILE_ATTRIBUTE_OFFLINE EQUATE(00001000h) ! данные немедленно недоступны (в дальнем хранилище)
FILE_ATTRIBUTE_ENCRYPTED EQUATE(00004000h)
! 4. идентификаторы разрешений совместного доступа к файлу
FILE_SHARE_NONE Equate(0)
FILE_SHARE_READ Equate(1)
FILE_SHARE_WRITE Equate(2)
FILE_SHARE_DELETE Equate(4)
FILE_SHARE_BOTH Equate(FILE_SHARE_READ + FILE_SHARE_WRITE)
FILE_SHARE_ALL Equate(FILE_SHARE_BOTH + FILE_SHARE_DELETE)
! 5. плохой Handle
INVALID_HANDLE_VALUE Equate(0FFFFFFFFh)
MAP
MODULE('Windows.dll')
CreateFile(*CString lpFileName, ULONG dwDesiredAccess, ULONG dwShareMode, |
ULONG Addr_SecurityAttributes=0, ULONG dwCreationDisposition, ULONG dwFlagsAndAttributes, |
UnSigned hTemplateFile=0),UnSigned, PASCAL,RAW,Name('CreateFileA'),DLL(TRUE)
GetFileSize(UnSigned hFile, ULONG Addr_FileSizeHigh=0),ULONG, PASCAL,RAW,DLL(TRUE)
GetFileTime(UnSigned hFile, *FILETIME lpCreationTime, |
ULong lpLastAccessTime=0, |
ULong lpLastWriteTime=0),BOOL, PASCAL,RAW,DLL(TRUE),proc
FileTimeToSystemTime(*FILETIME lpFileTime, *SYSTEMTIME lpSystemTime), BOOL, PASCAL,RAW,DLL(TRUE),proc
END !MODULE
FileFound_LenDate (String FullNameOfFileWithExt, <*ULong Bytes>, <*Long CreationDate>), Byte
END !MAP
CODE
!----------------------------
FileFound_LenDate FUNCTION (String FullNameOfFileWithExt, <*ULong Bytes>, <*Long CreationDate>) !, Byte
! между прочим, бывают файлы и нулевой длины...
ret Byte(FALSE) ! для возврата: если файл найден - TRUE
hFile UnSigned
lpcFileName CString(256)
CreationDateTime Group(FILETIME).
FileSystemTime Group(SYSTEMTIME).
!*****************************************************************************************
CODE
lpcFileName = FullNameOfFileWithExt
hFile = CreateFile(lpcFileName, GENERIC_READ, FILE_SHARE_BOTH, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
If hFile <> INVALID_HANDLE_VALUE Then ! Нет ошибки
ret += 1
If ~Omitted(2) Then Bytes = GetFileSize(hFile).
If ~Omitted(3) Then
GetFileTime(hFile, CreationDateTime)
FileTimeToSystemTime(CreationDateTime, FileSystemTime)
CreationDate = Date(FileSystemTime.wMonth, FileSystemTime.wDay, FileSystemTime.wYear)
! Если хотите - дополните возвратом и времени создания, используя:
!FileSystemTime.wDayOfWeek
!FileSystemTime.wHour
!FileSystemTime.wMinute
!FileSystemTime.wSecond
!FileSystemTime.wMilliseconds
End
CloseHandle(hFile)
Else
If ~Omitted(2) Then Clear(Bytes).
If ~Omitted(3) Then Clear(CreationDate).
End
Return(ret)
Что касается функций WinAPI, то все уже сделала Veronica Chapman (http://www.clarionopensource.com/).Допустим откопали вы в гуглах нужную Вам апи функцию, видите, к примеру
The purpose of this Gateway is to provide links to Windows API materials that have been 'Clarionised' and tested. This will be done 'as and when', and will comprise links to Text Files containing 'Clarionised' Source Text.