Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2008, 20:05   #1
toxa-kachok
 
Регистрация: 01.11.2008
Сообщений: 4
По умолчанию Объясните строки

Здравствуйте. Объясните пожалуйста несколько строк в программе.
Код:
Uses DOS;

Procedure FileFind(Dir,FindName : PathStr);
{Поиск файлов по маске по всему диску}

 Procedure SearchDir(Dir : PathStr);
 Var
   SRec       : SearchRec;
 begin
   {Поиск файлов по маске}
   if Dir[Length(Dir)] <> '\' then Dir := Dir+'\';
   FindFirst(Dir + FindName, AnyFile, SRec);
   While DosError = 0 do
     begin
       With SRec do
        if Attr and (VolumeID + Directory) = 0 then ЭТА СТРОКА
         WriteLn(Dir + Name);
       FindNext(SRec);
     end;
   {Поиск всех вложенных каталогов, в т.ч. скрытых, системных, r/o}
   FindFirst(Dir+'*.*', Directory or ReadOnly or Hidden or SysFile, SRec);
   While DosError = 0 do
     begin
       With SRec do
        if (Attr and Directory <> 0) and (Name[1] <> '.') then ЭТА СТРОКА
         SearchDir(Dir+Name); И ЭТА
       FindNext(SRec);
     end;
 end;

begin
 SearchDir(Dir);
end;
{------------------------------------------}
{Пример поиска всех .TXT файлов на диске С:}
begin
  FileFind('c:\','*.txt');
end.
toxa-kachok вне форума Ответить с цитированием
Старый 02.11.2008, 11:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
if Attr and (VolumeID + Directory) = 0
Операция and в данном случае бинарная (побитовая) операция И
в переменной Srec.Attr (Attr: Integer находятся аттрибуты найденного файла.
они бывают:
Код:
Constant	Value	Description

faReadOnly	$00000001	Read-only files
faHidden	$00000002	Hidden files
faSysFile	$00000004	System files
faVolumeID	$00000008	Volume ID files
faDirectory	$00000010	Directory files
faArchive	$00000020	Archive files
faAnyFile	$0000003F	Any file
грубо говоря (VolumeID + Directory) - это формирование битовой маски ( т.е. числа, в котором в двоичном представлении единички в тех разрядах, в которых мы хотим проверить значения).
если проверяемые значения не равны единице (т.е. равны нулю), то значит найденный элемент файловой системы НЕ ЯВЛЯЕТСЯ меткой диска и директорией...
(т.е. мы нашли запись о файле).

Цитата:
(Attr and Directory <> 0)
- найденная запись - директория.

Цитата:
(Name[1] <> '.')
данная директория не является служебной (в любой папке, кроме корневой присутствую ещё две записи - служебные директории с именем '.' - это ссылка на текущий каталог.
и с именем '..' - это ссылка на родительскую директорию...
кстати, выполните в командной строке команду dir
и увидите там (даты будут, разумеется другими :-))
Код:
03.05.2008  08:02    <DIR>          .
03.05.2008  08:02    <DIR>          ..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2008, 22:05   #3
toxa-kachok
 
Регистрация: 01.11.2008
Сообщений: 4
Радость

Классно Спасибо
toxa-kachok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните пожалуйста TheHerd Паскаль, Turbo Pascal, PascalABC.NET 12 04.04.2008 21:33
объясните код Rend1 Общие вопросы Delphi 18 01.02.2008 14:52
друзья объясните! StoneD Свободное общение 1 30.12.2007 19:38
Объясните, пожалуйста смысл строки - res=d.year > year ? -1: (d.year < year? 0:1) Fynj Помощь студентам 2 17.12.2007 17:50