- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Programming/ CheckFileTime >



Check File Time

Проверка даты создания файла

Данный пример создавался как решение совершенно конкретной задачи, но может служить чем-то вроде шаблона для написания приложений на Clipper, в которых некоторые функции удобнее пишутся на Assembler.

Итак, в очередной раз переделывая свою постоянно действующую глюкалу :) на Клиппере, я опять натолкнулась на задачу, решение которой лучше доверить Ассмеблеру, тем более, что использовать совместно Клиппер и Ассмблер я уже научилась (см. StringConvert)

В процессе работы проги создается временный текстовый файл протокола. И стало нужно не удалять его при каждом выходе из проги, а хранить какое то время. Но не бесконечно, а _какое_то_время_.

Перебрав разные варианты, как это в данном случае проще реализовать, я поняла, что проще и, что самое главное, надежнее, будет тупо проверять дату/время создания этого файла перед _каждой_ процедурой добавления туда новой строки.

Поскольку в Клиппер опять же нет нормального способа сделать это, а писАть - так это у меня прога в основном будет заниматься проверкой даты файла, а не работать, то написАла эту штуку на Асме.

Идея себя оправдала - функция работает, как часы :), а в проге не чувствуется вообще. Т.е. что она там есть, что нет ее.. Даже на старых медленных компах.


Как это работает.

Получаем дату создания файла, получаем системную дату (т.е. для правильной работы надо, чтобы часы на машине шли более менее правильно, хотя никаких падений, если это не так, не будет), переводим то и другое в количество минут с 1980 года, вычитаем и сравниваем с константой iTimeDelta, задаваемой в ftimec.asm.
Если константа больше или равна - значит файл еще новый. Если меньше - устарел. В зависимости от этого возвращаем:

0 - ошибка (любая)
1 - файл устарел
2 - файл новый

Самое хитрое в этой задаче оказалось придумать алгоритм перевода даты/времени в минуты :) Возможно, для кого-то эта задача и не задача, или пример есть.. Мне пришлось придумывать самой. ИМХО получилось неплохо. Во всяком случае аглоритм работает.

Функция, которая этим занимается, живет в модуле CMinutes.asm


Как это использовать.

Не буду подробно рассматривать, как прилинковать модули к Клипперной проге, это можно посмотреть в StringConvert

А непосредсвенно вызов этой функции из проги на Клиппер выглядит вот так:

iRes := FTimeCheck(szFileName)


Файлы, которые можно скачать:

ftimec.asm	- Основная программа
CMinutes.asm	- Функция перевода времени в минуты

FTime.asm	- КоммандЛайн вариант проги - посмотреть, как работает

ftime.lnk	- .lnk файл для клипперного полигончика
ftime.rmk	- .rmk файл для клипперного полигончика
main.prg	- сам клипперный полигончик :)

CheckFileTime.zip - все вместе, включая это описание

Extasm.inc	- Extend System definitions for assembly language
Extenda.inc	- (Эти два файла - если вдруг у вас своих не оказалось.)




* #WhiteUnicorn/ StartPage/ Programming/ CheckFileTime >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile