Разработка файловой оболочки

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

t; Length(FR) then

EndFor:=Length(MaskR)

else

EndFor:=Length(FR);

if (MaskR[2]=*) and (FR<>) then

begin

j:=Length(MaskR);

for i:=Length(FR) downTo Length(Fr)-EndFor do

begin

if (MaskR[j]=FR[i]) and (MaskR[j]<>*) then

begin

j:=j-1;

R:=True;

end

Else

if (MaskR[j]=*) and (R=True) then

begin

break;

end

else

begin

R:=False;

Break;

end;

end;

end;

If MaskR[Length(MaskR)]=* then

begin

j:=1;

for i:=1 to EndFor do

begin

if (MaskR[j]=FR[i]) and (MaskR[j]<>*) then

begin

j:=j+1;

R:=True;

end

else

begin

if (MaskR[j]=*) and (R=True) then

begin

break;

end

else

begin

R:=False;

Break;

end;

end;

end;

end;

for i:=0 to Length(MaskR) do

if MaskR[i]<>* then

tmp:=True

else

begin

tmp:=False;

break;

end;

if tmp then

if Length(MaskR)=Length(FR) then

begin

for i:=0 to Length(FR) do

if MaskR[i]=FR[i] then

R:=True

else

begin

R:=False;

break;

end;

end

else

begin

R:=False;

end;

//вроде конец с мучениями по расширению

//начало мучений с именем

if R then

begin

if Length(MaskN)<Length(FN) then

EndFor:=Length(MaskN)

else EndFor:=Length(FN);

if MaskN[1]=* then

begin

j:=Length(MaskN);

for i:=Length(FN) downto Length(FN)-EndFor do

begin

if (MaskN[j]=FN[i]) and (MaskN[j]<>*) then

begin

j:=j-1;

R:=True;

end

else

begin

if (MaskN[j]=*)and(R=True) then

begin

break;

end

else

begin

r:=false;

break;

end;

end;

end;

end;

if MaskN[Length(MaskN)]=* then

begin

j:=0;

for i:=0 to EndFor do

begin

if (MaskN[j]=FN[i]) and (MaskN[j]<>*) then

begin

j:=j+1;

r:=True;

end

else

begin

if (MaskN[j]=*)and(R=True) then

break

else

begin

R:=False;

break;

end;

end;

end;

end;

for i:=0 to Length(MaskN) do

if MaskN[i]<>* then

tmp:=True

else

begin

tmp:=False;

break;

end;

if tmp then

if Length(MaskN)<>Length(FN) then

r:=False

else

begin

for i:=0 to Length(MaskN) do

if MaskN[i]=FN[i] then

r:=True

else

begin

r:=False;

break;

end;

end;

end;

CompareFileWithMask:=R;

end;

 

Procedure FindFile;

// Поиск файла

Var

Dir:string;

SubDir:string;

Dr:Char;

begin

//Поиск в текущей директории

If FindForm.RBCurDir.Checked then

begin

Dir:=FindForm.LCurDir.Caption;

if Dir[Length(Dir)]<>\ then

Dir:=Dir+\;

FindForm.FindInCurrentDir(Dir);

end;

//Поиск на текущем диске

If FindForm.RBCurDrive.Checked then

begin

Dir:=FindForm.LCurDir.Caption;

if Dir[Length(Dir)]<>\ then

Dir:=Dir+\;

FindForm.FindInCurrentDir(Dir);

end;

//Поиск на всех дисках

If FindForm.RBAllDrives.Checked then

begin

FindInAllDr;

end;

end;

 

Procedure TFindForm.FindInCurrentDir(CurDir:string);

//Рекурсивная Процедура поиска в текущей директории и поддиректориях

Var

SizeF:integer;

i:integer;

EndList:boolean;

F:TSearchRec;

D:string;

Key:Char;

begin

FindForm.StatusFind.Panels[1].Text:=CurDir;

FindFirst(CurDir+*.*,faAnyFile,F);

FindNext(F);

repeat

// вставить АSМовый код для прерывания по клавише ESC

faDirectory)then"> If FindForm.CBAdvSearch.Checked and (F.Attr<>faDirectory) then

begin

StrToInt(FindForm.SGreater.Text))))thenContinue;"> if not(((F.Size StrToInt(FindForm.SGreater.Text)))) then Continue;

FindForm.DateIsAfter.Date)))thenContinue;"> if not(((FileDateTime(CurDir+F.Name) FindForm.DateIsAfter.Date))) then Continue;

end;

if F.Attr=faDirectory then

.)and(F.Name..) then

begin

FindInCurrentDir(CurDir+F.Name+\);

end;

..)and(F.Name.) then

if CompareFileWithMask(F.Name) then

begin

FindForm.FileWasFind.Items.Add(CurDir+F.Name);

FindForm.StatusFind.Panels[0].Text:=IntToStr(StrToInt(FindForm.StatusFind.Panels[0].Text)+1);

FindForm.FileWasFind.Refresh;

end;

Until((FindNext(F) <> 0));{ and (KeyPressed));}

FindClose(F);

end;

 

Procedure FindInAllDr;

//Поиск на всех дисках

Var

Dir:string;

i:integer;

begin

for i:=1 to MainForm.DrBox.Items.Count-1 do

begin

dir:=MainForm.DrBox.Items.Strings[i];

dir:=UpperCase(dir[1]);

FindForm.FindInCurrentDir(dir+:\);

end;

end;

 

Procedure WhereFind;

//Интерфейсная часть

Var

i:integer;

begin

if FindForm.RBCurDir.Checked then

begin

FindForm.LCurDir.Caption:=MainForm.Directory.Directory;

end;

if FindForm.RBCurDrive.Checked then

begin

FindForm.LCurDir.Caption:=UpperCase(MainForm.Directory.Drive)+:\;

end;

if FindForm.RBAllDrives.Checked then

begin

FindForm.LCurDir.Caption:=;

for i:=1 to MainForm.DrBox.Items.Count-1 do

begin

FindForm.LCurDir.Caption:=FindForm.LCurDir.Caption+UpperCase(MainForm.DrBox.Items.Strings[i][1])+:\

end;

end;

end;

 

Procedure InitFileMask;

//Проверка маски поиска для дальнейшего занесения в список масок

Var

i:integer;

tempStr:string;

begin

tempStr:=FindForm.CBFindMask.Text;

FindForm.CBFindMask.Clear;

for i:=1 to 10 do

begin

if FileMaskToFind[i]<> then

FindForm.CBFindMask.Items.Add(FileMaskToFind[i]);

end;

FindForm.CBFindMask.Text:=tempStr;

end;

 

Procedure ZdvigMask(s:string);

// Формирование списка масок поиска для хранения

Var

i:integer;

tmp:boolean;

begin

*.*then"> if FindForm.CBFindMask.Text<>*.* then

begin

for i:=10 downto 0 do

FindForm.CBFindMask.Textthen"> if FindForm.CBFindMask.Items[i]<>FindForm.CBFindMask.Text then

tmp:=true

else

begin

tmp:=False;

break;

end;

if tmp then

for i:=10 downto 2 do

begin

FileMaskToFind[i]:=FileMaskToFind[i-1];

end;

FileMaskToFind[1]:=s;

end;

end;

 

procedure TFindForm.FormActivate(Sender: TObject);

//Установка начальных значений для виз. компонент формы поиска

begin

Timer1.Enabled:=True;

InitFileMask;

DateIsBefore.Date:=Date;

DateIsAfter.Date:=Date;

CBFindMask.Text:=*.*;

CBCase.Checked:=False;

RBCUrDir.Checked:=True;

LCurDir.Caption:=MainForm.Directory.Directory;

SGreater.Text:=;

SLess.Text:=;

CBAdvSearch.Checked:=False;

FileWasFind.Clear;

FindForm.StatusFind.Panels[0].Text:=0;

FindForm.ActiveControl:=CBFindMask;

end;

 

procedure TFindForm.BitBtn1Click(Sender: TObject);

//Начать поиск файлов

begin

ZdvigMask(CBFindMask.Text);

FindForm.FileWasFind.Clear;

FindForm.StatusFind.Panels[0].Text:=0;

FindForm.FileWasFind.Sorted:=False;