Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятная работа FindFirst / FindNext


Страницы:   1 2

Piter ©   (2006-07-04 18:58:00) 

Алгоритм подсмотрен в справке Delphi:


 FileAttrs := faReadOnly or faSysFile or faVolumeID or faArchive ;
 if FindFirst(<ПУТЬ>, FileAttrs, sr) = 0 then
 repeat
   SizeInt := sr.FindData.nFileSizeHigh shl 32;
   SizeInt := SizeInt + sr.FindData.nFileSizeLow ;
   if ( (sr.Attr and FileAttrs) = sr.Attr)and ( SizeInt > 0 ) then
...


Собственно, проверка условия: (sr.Attr and FileAttrs) = sr.Attrвзята из справки.

Вопросы - а зачем нужно это условие проверки? Дело в том, что у пользователей выявлены ситуации, когда это условие НЕ выполняется (хотя файлы подпадают под критерий поиска). Например, бывает такое:

sr.Attr = 8224 = $00002020
FileAttrs = 45 = $0000002D

Вообще странно, если судить по объявлению констант:

{ File attribute constants }

 faReadOnly  = $00000001 platform;
 faHidden    = $00000002 platform;
 faSysFile   = $00000004 platform;
 faVolumeID  = $00000008 platform;
 faDirectory = $00000010;
 faArchive   = $00000020 platform;
 faSymLink   = $00000040 platform;
 faAnyFile   = $0000003F;


Значений выше $3F и быть не должно... А вот нате...


Юрий Зотов   (2006-07-04 19:45:00) [21]

> Piter ©   (04.07.06 18:58)

Это флаг FILE_ATTRIBUTE_NOT_CONTENT_INDEXED ($2000). В SR.Attr он будет установлен, если в свойствах файла (каталога, диска) сброшена птичка "разрешить индексацию".


guav   (2006-07-04 19:15:00) [22]

см. в msdn по WIN32_FIND_DATA, какие сейчас бывают атрибуты.

из JwaWinNT.pas
 FILE_SHARE_READ                    = $00000001;
 {$EXTERNALSYM FILE_SHARE_READ}
 FILE_SHARE_WRITE                   = $00000002;
 {$EXTERNALSYM FILE_SHARE_WRITE}
 FILE_SHARE_DELETE                  = $00000004;
 {$EXTERNALSYM FILE_SHARE_DELETE}
 FILE_ATTRIBUTE_READONLY            = $00000001;
 {$EXTERNALSYM FILE_ATTRIBUTE_READONLY}
 FILE_ATTRIBUTE_HIDDEN              = $00000002;
 {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN}
 FILE_ATTRIBUTE_SYSTEM              = $00000004;
 {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM}
 FILE_ATTRIBUTE_DIRECTORY           = $00000010;
 {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY}
 FILE_ATTRIBUTE_ARCHIVE             = $00000020;
 {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE}
 FILE_ATTRIBUTE_DEVICE              = $00000040;
 {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE}
 FILE_ATTRIBUTE_NORMAL              = $00000080;
 {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}
 FILE_ATTRIBUTE_TEMPORARY           = $00000100;
 {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY}
 FILE_ATTRIBUTE_SPARSE_FILE         = $00000200;
 {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE}
 FILE_ATTRIBUTE_REPARSE_POINT       = $00000400;
 {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT}
 FILE_ATTRIBUTE_COMPRESSED          = $00000800;
 {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED}
 FILE_ATTRIBUTE_OFFLINE             = $00001000;
 {$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE}
 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000;
 {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED}
 FILE_ATTRIBUTE_ENCRYPTED           = $00004000;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо