Страница 2 из 2

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 9:43
Koss
Unresolved External GETFILEDATE@FsbUc in krbti003.obj

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 9:44
George
Шаблоны Kstools, в т.ч. дата создания\изменения файла

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 9:54
George
Шаблоны Kstools, в т.ч. дата создания\изменения файла

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 11:29
Дед Пахом
Koss писал(а):
Unresolved External GETFILEDATE@FsbUc in krbti003.obj
Подключите файл C55UTIL.CLW в проект (ветка External source files) или допишите в самом конце файла C55UTIL.INC

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

COMPILE('Link', _ABCLinkMode_)
  PRAGMA('compile(C55UTIL.CLW)')
!Link

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 12:17
Koss
Всё, я понял. Нужно было через Project -> Edit добавлять.

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 12:20
Koss
А в каком формате кларион время возвращает?

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 14:44
Дед Пахом
Koss писал(а):А в каком формате кларион время возвращает?
Если Вы про функции GetFileDate/GetFileTime, то посмотрите на их исходный текст, на оператор RETURN. А так... Время в Clarion это LONG - число сотых секунды с полуночи.

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 16:23
Koss
А как GetCurrentDirectory получить?
Т.е. каталог, где экзешник запустили.
поиск GetCurrentDirectory по "C:\Program Files\Clarion 5.5" ничего не дал.

Re: дата создания\изменения файла

Добавлено: 30 Август 2010, 17:12
Дед Пахом
Koss писал(а):А как GetCurrentDirectory получить?
Т.е. каталог, где экзешник запустили.
поиск GetCurrentDirectory по "C:\Program Files\Clarion 5.5" ничего не дал.
PATH(), если до его вызова не было переходов в другую папку (SETPATH или FILEDIALOG или ещё как).

Re: дата создания\изменения файла

Добавлено: 31 Август 2010, 12:40
Koss
Спасибо, друзья!

Re: дата создания\изменения файла

Добавлено: 03 Сентябрь 2010, 15:46
Koss
Извините, вот ещё вопрос.
Допустим откопали вы в гуглах нужную Вам апи функцию, видите, к примеру
Syntax
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
Как её использовать в самом кларионе?
Без всяких сторонних ресурсов?
через winapi.exe как-то ?

Re: дата создания\изменения файла

Добавлено: 03 Сентябрь 2010, 16:25
Дед Пахом
Koss писал(а):Извините, вот ещё вопрос.
Допустим откопали вы в гуглах нужную Вам апи функцию, видите, к примеру
Syntax
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
Как её использовать в самом кларионе?
Без всяких сторонних ресурсов?
через winapi.exe как-то ?
Я так понимаю, с языком C Вы незнакомы? Тогда будет сложно. Попробую на данном конкретном случае объяснить суть:

DWORD - возврат функции (двойное слово, Clarion 'эквивалент ULONG)
__in, __out_opt - пометки, что параметр является входящим/выходящим, необязательным (игнорируем)
HANDLE - синоним для DWORD (ULONG)
LPDWORD - длиный указатель на DWORD (Clarion 'эквивалент *ULONG)
WINAPI - порядок записи параметров в стек (для winapi добавляем в объявление процедуры на Clarion PASCAL)

В итоге

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

  MODULE('WinApi')
    GetFileSize(ULONG, *ULONG), ULONG, PASCAL, NAME('GetFileSize')
  END
Рассмотренный случай примитивный, обычно всё сложнее :D

Re: дата создания\изменения файла

Добавлено: 03 Сентябрь 2010, 16:51
Admin
FYI

Re: дата создания\изменения файла

Добавлено: 04 Сентябрь 2010, 0:44
WadimZapara
С успехом использую следующий текст с функцией FileFound_LenDate (правда в составе DLL с другими):
ФУНКЦИЯ ПРОВЕРЯЕТ НАЛИЧИЕ ФАЙЛА И ВОЗВРАЩАЕТ (ЕСЛИ ПРОСЯТ) ЕГО ДЛИНУ И ДАТУ СОЗДАНИЯ
Работает и в том случае, когда средствами NTFS просмотр каталога с этим файлом запрещён, но сам файл для чтения разрешён
(DIR, Explorer и другие файл-менеджеры - в таком случае этот файл не находят)

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

! Сначала объявляются типы и константы, а затем функции
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)

Re: дата создания\изменения файла

Добавлено: 05 Сентябрь 2010, 9:38
morkovin
Допустим откопали вы в гуглах нужную Вам апи функцию, видите, к примеру
Что касается функций WinAPI, то все уже сделала Veronica Chapman (http://www.clarionopensource.com/).
Конкретно по WinApi - http://www.clarionopensource.com/mywina ... sitory.htm
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.