Jump to content
vvvyg

Класс TFileSearch функционирует не так как описано в документации

Recommended Posts

К двухлетнему юбилею первого и единственного сообщения об этом баге ;) на Virusinfo подниму проблему снова. Похоже, кроме меня и AndreyKondaurov этим классом никто не пользуется, поэтому я, также как и Андрей, использовал некие костыли чтобы обойти этот баг, думая, да что уж там, ради двоих, может и не будет автор суетиться. Но сегодня мне было озарение: Олег же тоже использует этот класс! Подтверждение этому - такого вида строки в .ini-файлах карантина:

MainAVBase=30.12.1899
- явно оттуда же ноги растут.

Share this post


Link to post
К двухлетнему юбилею первого и единственного сообщения об этом баге ;) на Virusinfo подниму проблему снова. Похоже, кроме меня и AndreyKondaurov этим классом никто не пользуется, поэтому я, также как и Андрей, использовал некие костыли чтобы обойти этот баг, думая, да что уж там, ради двоих, может и не будет автор суетиться. Но сегодня мне было озарение: Олег же тоже использует этот класс! Подтверждение этому - такого вида строки в .ini-файлах карантина: - явно оттуда же ноги растут.

Приведенный пример в INI файле карантина с указанным классом скриптязыка не связано вообще никак - это не более чем интерпретация даты, равной нулю :) Я хотел сначала сделать запись типа "MainAVBase=NULL", но это вызовет проблему с парсингом (придется анализировать наличие даты или NULL), потому я плюнул и оставил как есть. Пресловутое 30.12.1899 - не более чем стандартная точка отсчета.

По поводу класса TFileSearch - я придумал его специально для скриптязыка, он применяется в ряде эвристик и визардов, но дата нигде не запрашивается ... Я сделал тестовый пример, посмотрел. Там с возвратом даты глюк, я пофиксил - сдалал как по документации, дату создания файла в формате TDateTime.

Share this post


Link to post
Там с возвратом даты глюк, я пофиксил - сдалал как по документации, дату создания файла в формате TDateTime.

То есть, получить дату модификации файла в новой версии AVZ будет не возможно?

Share this post


Link to post

Олег, простой пример. Скрипт:

var

FS : TFileSearch;

begin
FS := TFileSearch.Create(nil);
if FS.FindFirst('%WinDir%\explorer.exe') then 
AddToLog('Найден файл: '+FS.FileName + ', время создания: ' + DateTimeToStr(FS.FileTime));
FS.Free;
AddToLog('А сейчас у нас ' + DateTimeToStr(now));
end.

при запуске выдаёт:

Найден файл: explorer.exe, время создания: 28.11.4065
А сейчас у нас 19.04.2012 9:40:48

Судя по выводу, полученное в FileTime время не совсем в формате TDateTime.

Если я что-то не понимаю, просьба разъяснить.

Share this post


Link to post
То есть, получить дату модификации файла в новой версии AVZ будет не возможно?

Все будет возможно: доработанный класс будет выдавать 3 даты: дату создания, дату последней модификации и дату последнего доступа (соответственно будет 3 свойства для получения даты)

Share this post


Link to post
Судя по выводу, полученное в FileTime время не совсем в формате TDateTime.

Если я что-то не понимаю, просьба разъяснить.

В неисправленной версии был глюк и вместо времени в формате TDateTime выдавалось время в том виде, как его выдает API ...

Share this post


Link to post

Очень хорошо. Исправление будет в новой версии, или с обновлениями?

Share this post


Link to post
Очень хорошо. Исправление будет в новой версии, или с обновлениями?

В новой версии, через базы такое увы не обновить ...

Share this post


Link to post
Все будет возможно: доработанный класс будет выдавать 3 даты: дату создания, дату последней модификации и дату последнего доступа (соответственно будет 3 свойства для получения даты)

Олег, можно описание класса с изменениями? Не терпится проверить ;)

 

Share this post


Link to post

Сам разобрался. Пример использования:

var

FS : TFileSearch;

begin
FS := TFileSearch.Create(nil);
if FS.FindFirst('%WinDir%\explorer.exe') then 
AddToLog('Найден файл: '+FS.FileName + ', время создания: ' + DateTimeToStr(FS.FileTime));
AddToLog('время изменения: ' + DateTimeToStr(FS.FileLastWriteTime));
AddToLog('время последнего доступа: ' + DateTimeToStr(FS.FileLastAccessTime));
FS.Free;
end.

Share this post


Link to post

Опечатка в описании класса в файле помощи и в документации на сайте.

property FileLastWriteTime : TDateTime;

 

Возвращает дату и время последней модификации последнего найденного объекта (поддерживается начиная с AVZ 4.29 и KIS 2013)

 

 

property FileLastAccessTime : TDateTime;

 

Возвращает дату и время последнего доступа последнего найденного объекта (поддерживается начиная с AVZ 4.29 и KIS 2013)

4.39, конечно же.

Share this post


Link to post

×
×
  • Create New...

Important Information

We use cookies to make your experience of our websites better. By using and further navigating this website you accept this. Detailed information about the use of cookies on this website is available by clicking on more information.