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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Koss
Бывалый
Сообщения: 57
Зарегистрирован: 27 Март 2009, 15:38

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

Сообщение Koss »

Unresolved External GETFILEDATE@FsbUc in krbti003.obj
George
Активист
Сообщения: 111
Зарегистрирован: 04 Август 2009, 10:48
Благодарил (а): 2 раза

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

Сообщение George »

Шаблоны Kstools, в т.ч. дата создания\изменения файла
George
Активист
Сообщения: 111
Зарегистрирован: 04 Август 2009, 10:48
Благодарил (а): 2 раза

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

Сообщение George »

Шаблоны Kstools, в т.ч. дата создания\изменения файла
Вложения
KStools.zip
(873.88 КБ) 223 скачивания
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Сообщение Дед Пахом »

Koss писал(а):
Unresolved External GETFILEDATE@FsbUc in krbti003.obj
Подключите файл C55UTIL.CLW в проект (ветка External source files) или допишите в самом конце файла C55UTIL.INC

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

COMPILE('Link', _ABCLinkMode_)
  PRAGMA('compile(C55UTIL.CLW)')
!Link
С уважением, ДП
Koss
Бывалый
Сообщения: 57
Зарегистрирован: 27 Март 2009, 15:38

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

Сообщение Koss »

Всё, я понял. Нужно было через Project -> Edit добавлять.
Koss
Бывалый
Сообщения: 57
Зарегистрирован: 27 Март 2009, 15:38

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

Сообщение Koss »

А в каком формате кларион время возвращает?
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Сообщение Дед Пахом »

Koss писал(а):А в каком формате кларион время возвращает?
Если Вы про функции GetFileDate/GetFileTime, то посмотрите на их исходный текст, на оператор RETURN. А так... Время в Clarion это LONG - число сотых секунды с полуночи.
С уважением, ДП
Koss
Бывалый
Сообщения: 57
Зарегистрирован: 27 Март 2009, 15:38

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

Сообщение Koss »

А как GetCurrentDirectory получить?
Т.е. каталог, где экзешник запустили.
поиск GetCurrentDirectory по "C:\Program Files\Clarion 5.5" ничего не дал.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Сообщение Дед Пахом »

Koss писал(а):А как GetCurrentDirectory получить?
Т.е. каталог, где экзешник запустили.
поиск GetCurrentDirectory по "C:\Program Files\Clarion 5.5" ничего не дал.
PATH(), если до его вызова не было переходов в другую папку (SETPATH или FILEDIALOG или ещё как).
С уважением, ДП
Koss
Бывалый
Сообщения: 57
Зарегистрирован: 27 Март 2009, 15:38

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

Сообщение Koss »

Спасибо, друзья!
Koss
Бывалый
Сообщения: 57
Зарегистрирован: 27 Март 2009, 15:38

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

Сообщение Koss »

Извините, вот ещё вопрос.
Допустим откопали вы в гуглах нужную Вам апи функцию, видите, к примеру
Syntax
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
Как её использовать в самом кларионе?
Без всяких сторонних ресурсов?
через winapi.exe как-то ?
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Сообщение Дед Пахом »

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
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение Admin »

FYI
Вложения
filedatetime.zip
FileDateTime
(7.87 КБ) 241 скачивание
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

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

Сообщение 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)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
morkovin
Ветеран
Сообщения: 935
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 9 раз
Поблагодарили: 4 раза
Контактная информация:

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

Сообщение 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.
WBR, morkovin
Ответить